это немного подробно, но помощь приветствуется. Это немного раздражающая особенность seaborn, что regplot не может работать с осями даты и времени. Это особенно важно, когда вы хотите использовать параметр lowess, который оценивает локальные средние значения, чтобы дать кривую (в отличие от линии), которая отслеживает изменения на графике. (Эта функция доступна, например, в R).
Это проблема для меня, потому что у меня есть линейный график, который я хотел бы сгладить, но без использования скользящего среднего. Это мой сюжет:
Чтобы решить эту проблему, я взял индекс моего фрейма данных в качестве оси X и использовал statsmodels для вычисления линии низкого значения следующим образом:
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import statsmodels.api as sm
rated = pd.read_csv('filepath.csv')
rated['linear'] = rated.index
x = rated['linear']
y = rated['trust_num']
lowess = sm.nonparametric.lowess(y, x, frac=.2)
low_y = [i[1] for i in lowess]
low_x = [i[0] for i in lowess]
rated['low_y'] = low_y
rated['low_x'] = low_x
rated['low_y'] = low_y
rated['low_x'] = low_x
h = sns.lineplot(x = 'linear', y = 'trust_num', data = rated)
h = sns.lineplot(x = 'linear', y = 'low_y', data = rated, color = 'r')
Это производит именно то, что я хотел бы:
Последний шаг заключается в назначении дат для оси X, что я делаю следующим образом:
labels = [i for i in rated['date']]
h.set_xticklabels(labels)
Результатом является кластеризованная ось X, как показано ниже:
Достаточно справедливо, это обычная проблема с графикой. Поэтому я пытаюсь повернуть метки xtick:
plt.xticks(rotation=45)
Но это не имеет значения. Кто-нибудь может посоветовать, как я мог бы осыпать ось? Кажется, что боль почти добралась до цели и упала на кажущуюся простой проблему!