【问题标题】:Making a regression line through a bar char using pandas or seaborn使用 pandas 和 seaborn 通过条形图制作回归线
【发布时间】:2018-07-28 06:41:42
【问题描述】:

我是 Pandas 和 Seaborn 的新手,正在努力学习。我正在尝试在同一图表上添加趋势线和条形图。我有一些看起来像的数据

Year     Sample Size
 2000      500
 2001      3000
 2003      10000
 2004      20000
 2004      23000

我是 pandas 和 seaborn 的新手,我试图在条形图上画一条线,显示下降或上升的趋势,但在同一张图上很难做到。到目前为止,我有一个条形图。您可以在下面找到代码。

sampleSizes['Sample Size'] -> 是我正在绘制的列。它有 12 年的大约 12 个值。

plt.figure()
ax = sampleSizes['Sample Size'].plot(kind='bar', title="Trend of Sample Sizes", figsize=(15, 10), legend=True, color = 'grey', fontsize=8)
plt.show()

我正在努力为此添加趋势线。如果有人能指出我正确的方向,我将不胜感激。

更新

FinancialYear  Sample Size
   2001         2338
   2002         3171
   2003         2597
   2004         2740
   2005         3447
   2006         3098
   2007         2610
   2008         2819
   2009         2057
   2010         2174
   2011         2709

enter code here

【问题讨论】:

  • 条形图是正确的表示类型吗?还是线图更合适?还有seaborn.regplot,但听起来你的数据根本不是线性的。
  • @AryaMcCarthy 是的,我同意线图会更好,但我试图在同一图表上显示条形图和显示数据趋势的线。我希望它能清楚地说明我想要实现的目标。我已经对上面的数据进行了一些编辑。我只是随机得到这些数字。这些数字不一定代表我的数据。然而,变量是

标签: python pandas matplotlib seaborn trendline


【解决方案1】:

UPDATE2:使用更新的数据集

In [250]: lr = Ridge()

In [251]: lr.fit(df[['FinancialYear']], df['Sample Size'])
Out[251]:
Ridge(alpha=1.0, copy_X=True, fit_intercept=True, max_iter=None,
   normalize=False, random_state=None, solver='auto', tol=0.001)

In [252]: plt.bar(df['FinancialYear'], df['Sample Size'])
Out[252]: <Container object of 11 artists>

In [253]: plt.plot(df['FinancialYear'], lr.coef_*df['FinancialYear']+lr.intercept_, color='orange')
Out[253]: [<matplotlib.lines.Line2D at 0x171def60>]

结果:


更新:

In [184]: from sklearn.linear_model import Ridge

In [185]: lr = Ridge()

In [186]: lr.fit(df[['Year']], df['Sample Size'])
Out[186]:
Ridge(alpha=1.0, copy_X=True, fit_intercept=True, max_iter=None,
   normalize=False, random_state=None, solver='auto', tol=0.001)

In [187]: plt.bar(df['Year'], df['Sample Size'])
Out[187]: <Container object of 5 artists>

In [188]: plt.plot(df['Year'], lr.coef_*df['Year']+lr.intercept_, color='orange')
Out[188]: [<matplotlib.lines.Line2D at 0x17062898>]

结果:


尝试使用 matplotlib 方法:

plt.bar(df['Year'], df['Sample Size'])
plt.plot(df['Year'], df['Sample Size'], '-o', color='orange')

结果:

【讨论】:

  • 我能做到。我正在尝试制作一条更平滑的线,就像一条回归线,只是显示总体趋势。就像一条向上的直线(就像在线性回归中一样),而不是被连接起来。
  • @paddy,请检查更新后的答案 - 这是你想要的吗?
  • 天哪,是的。太感谢了。过去一个小时一直在努力
  • @MaxU 很奇怪。因此,当我拥有所有 12 个值时,您的代码就可以工作。当我因为它是异常值而删除它时,它似乎崩溃了。你有什么理由明白为什么会发生这种情况?
  • @paddy,你能提供一个可重现的数据集吗?
猜你喜欢
  • 2017-11-05
  • 2021-09-19
  • 2021-11-12
  • 2021-07-28
  • 2019-02-02
  • 1970-01-01
  • 2021-01-15
  • 2022-01-09
  • 1970-01-01
相关资源
最近更新 更多