添加最低线后,在海底图中旋转xtick标签(而不是刻度)

时间:2018-10-30 10:56:44

标签: python-3.x matplotlib seaborn statsmodels

这有点详细,但可以帮助您。 Seaborn的一个有点烦人的功能是regplot无法处理日期时间轴。当您要使用lowess参数时,尤其如此,该参数估计局部均值以给出曲线(与直线相反)来跟踪绘图中的变化。 (例如,R中提供了此功能。)

这对我来说是个问题,因为我有一个线性图,想要平滑但不使用滚动平均值。这是我的情节:

No Lowess line

为解决此问题,我将数据框的索引作为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')

这恰好产生了我想要的: Lowess line

最后一步是将日期分配给x轴,具体操作如下:

labels = [i for i in rated['date']]
h.set_xticklabels(labels)

结果是一个聚集的x轴,如下所示: bad dates

足够公平,这是一个常见的绘图问题。因此,我尝试旋转我的xtick标签:

plt.xticks(rotation=45)

但这没什么区别。谁能建议我如何使轴混乱?似乎很难到达那里并陷入一个看似简单的问题!

0 个答案:

没有答案