有没有办法在seaborn中的条形图中添加回归线,其中x轴包含pandas.Timestamps?
例如,在下面的条形图中覆盖趋势线.我正在寻找最有效的方法:
seaborn.set(style="white", context="talk")
a = pandas.DataFrame.from_dict({'Attendees': {pandas.Timestamp('2016-12-01'): 10,
pandas.Timestamp('2017-01-01'): 12,
pandas.Timestamp('2017-02-01'): 15,
pandas.Timestamp('2017-03-01'): 16,
pandas.Timestamp('2017-04-01'): 20}})
ax = seaborn.barplot(data=a, x=a.index, y=a.Attendees, color='lightblue', )
seaborn.despine(offset=10, trim=False)
ax.set_ylabel("")
ax.set_xticklabels(['Dec', 'Jan','Feb','Mar','Apr'])
plt.show()
解决方法:
Seaborn条形图是绝对的情节.分类图不能直接用于回归,因为数值不适合.然而,通常的matplotlib条形图使用数字数据.
一个选项是在同一图表中绘制matplotlib条形图和seaborn regplot.
import numpy as np; np.random.seed(1)
import seaborn.apionly as sns
import matplotlib.pyplot as plt
x = np.linspace(5,9,13)
y = np.cumsum(np.random.rand(len(x)))
fig, ax = plt.subplots()
ax.bar(x,y, width=0.1, color="lightblue", zorder=0)
sns.regplot(x=x, y=y, ax=ax)
ax.set_ylim(0, None)
plt.show()
由于seaborn的barplot使用从0到条数的整数作为indizes,人们也可以使用这些indizes作为seaborn条形图顶部的回归图.
import numpy as np
import seaborn.apionly as sns
import matplotlib.pyplot as plt
import pandas
sns.set(style="white", context="talk")
a = pandas.DataFrame.from_dict({'Attendees': {pandas.Timestamp('2016-12-01'): 10,
pandas.Timestamp('2017-01-01'): 12,
pandas.Timestamp('2017-02-01'): 15,
pandas.Timestamp('2017-03-01'): 16,
pandas.Timestamp('2017-04-01'): 20}})
ax = sns.barplot(data=a, x=a.index, y=a.Attendees, color='lightblue' )
# put bars in background:
for c in ax.patches:
c.set_zorder(0)
# plot regplot with numbers 0,..,len(a) as x value
sns.regplot(x=np.arange(0,len(a)), y=a.Attendees, ax=ax)
sns.despine(offset=10, trim=False)
ax.set_ylabel("")
ax.set_xticklabels(['Dec', 'Jan','Feb','Mar','Apr'])
plt.show()