Python 使用pandas或seaborn通过条形图绘制回归线

Python 使用pandas或seaborn通过条形图绘制回归线,python,pandas,matplotlib,seaborn,trendline,Python,Pandas,Matplotlib,Seaborn,Trendline,我刚接触熊猫和海生动物,正在努力学习。我试图在同一个图表上添加趋势线和条形图。我有一些数据看起来像 Year Sample Size 2000 500 2001 3000 2003 10000 2004 20000 2004 23000 我对熊猫和海洋生物还不熟悉,我试图在条形图上画一条线,显示出下降或上升的趋势,但在同一张图上很难做到这一点。到现在为止,我有一个条形图。下面您可以找到代码 sampleSizes['Sampl

我刚接触熊猫和海生动物,正在努力学习。我试图在同一个图表上添加趋势线和条形图。我有一些数据看起来像

Year     Sample Size
 2000      500
 2001      3000
 2003      10000
 2004      20000
 2004      23000
我对熊猫和海洋生物还不熟悉,我试图在条形图上画一条线,显示出下降或上升的趋势,但在同一张图上很难做到这一点。到现在为止,我有一个条形图。下面您可以找到代码

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

更新2:使用更新的数据集

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>]
结果:


条形图是否是正确的表示形式?还是直线图更合适?也有,但听起来你的数据根本不是线性的。@Aryamcarthy是的,我同意线图会更好,但我正在尝试在同一个图上绘制条形图和一条显示数据趋势的线。我希望它清楚地表明我正在努力实现的目标。我已经编辑了上面的数据。我只是随机得到了这些数字。这些数字不一定代表我的数据。然而,变量是我能够做到这一点。我试着画一条更平滑的线,就像一条回归线,只是显示了总的趋势。就像一条向上的直线(就像线性回归中的直线),而不是连接起来。@paddy,请检查更新的答案-这就是你想要的吗?天哪,是的。非常感谢你。过去我一直在努力hour@MaxU很奇怪。所以当我有全部12个值时,你的代码可以工作。当我删除一个,因为它是一个异常值,它似乎崩溃。“你知道为什么会这样吗?”帕迪,你能提供一个可复制的数据集吗?
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>]
plt.bar(df['Year'], df['Sample Size'])
plt.plot(df['Year'], df['Sample Size'], '-o', color='orange')