【问题标题】:plot dataframe with two y-axes用两个 y 轴绘制数据框
【发布时间】:2019-01-17 22:48:52
【问题描述】:

我有以下数据框:

   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 

我想以如下方式绘制数据:
. land_cover 是 x 轴
. cols 1 - 6 应该是每个 land_cover 类(行)的堆积条形图
.并且列“大小”应该是第二个 y 轴,可以是每一行的简单点符号,另外还有一条连接点的平滑线

有什么想法吗?

【问题讨论】:

标签: python pandas dataframe matplotlib multiple-axes


【解决方案1】:

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

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

【讨论】:

  • 不知何故这会导致TypeError: 'AxesSubplot' object is not subscriptable 错误,但如果我先分配axax = df.plot(kind="bar", ...)df['size'].plot(secondary_y=True, ... 一切正常
  • 如果我一次绘制熊猫数据帧的两列,df[['size','lad_cover']].plot(secondary_y=True) 在这种情况下不起作用
  • @develarist 试试df.plot(x="A", y= ["B", "C", "D"], secondary_y=["C"]),这也允许每个 x 值有多个 y 值
【解决方案2】:

通常只需将one extra argument 添加到您的plot 呼叫中:secondary_y=['size']

在这种情况下,separate plot 更容易,因为线与条等。

【讨论】:

    猜你喜欢
    • 2016-10-27
    • 2021-07-31
    • 1970-01-01
    • 2014-07-10
    • 2020-11-12
    • 1970-01-01
    • 2017-07-18
    • 2020-05-12
    • 1970-01-01
    相关资源
    最近更新 更多