使用两个y轴绘制数据框图表

15

我有以下数据框:

   land_cover          1         2         3         4         5         6       size
0          20  19.558872  6.856950  3.882243  1.743048  1.361306  1.026382  16.520265
1          30   9.499454  3.513521  1.849498  0.836386  0.659660  0.442690  8.652517 
2          40  10.173790  3.123167  1.677257  0.860317  0.762718  0.560290  11.925280 
3          50  10.098777  1.564575  1.280729  0.894287  0.884028  0.887448  12.647710
4          60   6.166109  1.588687  0.667839  0.230659  0.143044  0.070628  2.160922 
5         110  17.846565  3.884678  2.202129  1.040551  0.843709  0.673298  30.406541 

我想以以下方式绘制数据:
. 土地覆盖为x轴
. 列1-6应按土地覆盖类(行)堆叠条形图
. 'size'列应为第二个y轴,可以是每行的简单点符号,并额外连接这些点的平滑线

有什么想法吗?


1
你最近尝试了什么? - RobJan
df.plot(x="land_cover", y=[1, 2, 3, 4, 5, 6, 7], stacked=True, kind="bar"),但我不太清楚如何添加第二个轴...而且也不确定这是否是最优雅的方法... - Christin Abel
1
检查在第二个Y轴上绘制:http://pandas.pydata.org/pandas-docs/version/0.12/visualization.html - xan
2个回答

28

你的代码很好,我只是添加了两行代码。

 import matplotlib.pyplot as plt 

 df.plot(x="land_cover", y=[1, 2, 3, 4, 5, 6], stacked=True, kind="bar")
 ax = df['size'].plot(secondary_y=True, color='k', marker='o')
 ax.set_ylabel('size')

 plt.show()

plot


不知何故,这会导致“TypeError: 'AxesSubplot' object is not subscriptable”错误,但如果我先分配“ax:ax = df.plot(kind =”bar“, ...)”,然后再执行“df['size'].plot(secondary_y=True, ...”,一切都正常。 - vladkras
如果我尝试同时绘制 Pandas DataFrame 中的两列,类似 df[['size','lad_cover']].plot(secondary_y=True)这样的语句在这种情况下是不起作用的。 - develarist
@develarist 试试这样的代码 df.plot(x="A", y= ["B", "C", "D"], secondary_y=["C"]),这还可以让每个 x 值有多个 y 值。 - smcs
什么代码很好?似乎没有。现在的答案看起来不完整。对我没用。在这里找到了解决方案:https://dev59.com/2FYO5IYBdhLWcg3wRvkh#46063451 - markling

12

一般而言,只需在plot函数调用中添加一个额外的参数:secondary_y = ['size']。请参阅此处文档

但是,由于线条和柱状图等因素,plot分别提供更简单的方法,请参阅此处答案


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接