Seaborn barplot与回归线

时间:2017-06-04 18:17:04

标签: python matplotlib regression bar-chart seaborn

有没有办法在seaborn的条形图中添加回归线,其中x轴包含pandas.Timestamps?

例如,在下面的条形图中覆盖趋势线。我正在寻找最有效的方法:

csv.DictReader

enter image description here

1 个答案:

答案 0 :(得分:5)

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()

enter image description here

由于seaborn的条形图使用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()

enter image description here