Поскольку у Сиборна проблемы с датами, я собираюсь найти обходной путь. Во-первых, я сделаю столбец 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-тиков на индекс:
# 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();
![изменить график 2](https://i.stack.imgur.com/Tpx4V.png)
Надеюсь это поможет!
person
Ian Thompson
schedule
21.09.2017
df.plot(style="o")
дает мне даты, хорошо обозначенные по оси x, аsns.tsplot(s)
- нет. - person theQman   schedule 27.03.2015