由于 Seaborn 在日期方面存在问题,我将创建一个解决方法。
首先,我将 Date 列设为我的索引:
# Make dataframe
df = pd.DataFrame({'amount' : [1,
1,
4,
1,
1]},
index = ['2014-01-06',
'2014-01-07',
'2014-01-08',
'2014-01-09',
'2014-01-14'])
其次,将索引转换为pd.DatetimeIndex:
# Make index pd.DatetimeIndex
df.index = pd.DatetimeIndex(df.index)
并用它替换原来的:
# Make new index
idx = pd.date_range(df.index.min(), df.index.max())
第三,用新索引(idx)重新索引:
# Replace original index with idx
df = df.reindex(index = idx)
这将为您没有数据的日期生成一个带有 NaN 值的新数据框:
第四,由于 Seaborn 不能很好地处理日期和回归线,我将创建一个行数列,我们可以将其用作 x 轴:
# Insert row count
df.insert(df.shape[1],
'row_count',
df.index.value_counts().sort_index().cumsum())
第五,我们现在应该能够使用“row_count”作为我们的 x 变量和“amount”作为我们的 y 变量来绘制回归线:
# Plot regression using Seaborn
fig = sns.regplot(data = df, x = 'row_count', y = 'amount')
第六,如果您希望日期沿 x 轴而不是 row_count,您可以将 x-tick 标签设置为索引:
# Change x-ticks to dates
labels = [item.get_text() for item in fig.get_xticklabels()]
# Set labels for 1:10 because labels has 11 elements (0 is the left edge, 11 is the right
# edge) but our data only has 9 elements
labels[1:10] = df.index.date
# Set x-tick labels
fig.set_xticklabels(labels)
# Rotate the labels so you can read them
plt.xticks(rotation = 45)
# Change x-axis title
plt.xlabel('date')
plt.show();
希望这会有所帮助!