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