【问题标题】:Python plot bar chart and percentage line chart on same graphPython在同一图表上绘制条形图和百分比折线图
【发布时间】:2016-07-09 22:08:28
【问题描述】:

我试图在同一个图表上绘制一条或多条线作为条形图来显示一些不同的指标。我听说我应该为此使用 ax.twinx() ,但是我得到一个错误,说 x 和 y 必须具有相同的第一维,或者根据我尝试的两件事读取 0L 的不同错误。这是我的代码;

    x = df4['Date']
    y = df4['Rate']
    ax = df4[['Date','Qty']].set_index('Date') \
                            .plot(kind='bar',
                                  stacked=False,
                                  color = 'dodgerblue',
                                  figsize=(13,4),
                                  legend=True)
    ax.set_xlabel(r"$\rm \bf{Date}$",
                  fontsize=18, 
                  rotation = 0)
    ax.set_ylabel(r'$\cal \bf{Qty}$ ',fontsize=18, rotation = 90)

    ax2 = ax.twinx()
    ax2.plot(x, y, color = 'green', linestyle = '--', linewidth= 2.0)

注意; df4 是一个分组的熊猫数据框。不确定这有多相关,但以防万一。

【问题讨论】:

  • 能否请您以 text/CSV 格式发布示例数据集,以便我们测试解决方案?

标签: python pandas matplotlib


【解决方案1】:

试试这个:

fig, ax = plt.subplots()
ax2 = ax.twinx()


df4[['Date','Qty']].set_index('Date') \
                   .plot(kind='bar',
                         ax=ax,
                         color = 'dodgerblue',
                         figsize=(13,4),
                         legend=False)

patches, labels = ax.get_legend_handles_labels()
ax.legend(patches, labels, loc='upper left')

ax.set_xlabel(r"$\rm \bf{Date}$", fontsize=18, rotation=0)
ax.set_ylabel(r'$\cal \bf{Qty}$ ',fontsize=18, rotation=90)

ax2.plot(range(len(df4)), df4['Rate'], 'green', label='Rate',
         linestyle = '--', linewidth=2.0)

patches, labels = ax2.get_legend_handles_labels()
ax2.legend(patches, labels, loc='upper right')

注意:如果您需要经过测试的解决方案,请提供示例数据

【讨论】:

  • 这实际上工作得很好,谢谢!我对这个网站比较陌生,所以也感谢你的提示。
  • @JacobDavis,很高兴我能帮上忙 :)
  • 在我在这里阅读的有关此主题的所有解决方案中,只有这个有效。有点复杂(我希望你能评论它实际上是如何工作的),但绝对值得!
猜你喜欢
  • 2015-09-01
  • 2020-06-19
  • 2020-05-06
  • 2016-06-12
  • 2021-12-22
  • 1970-01-01
  • 1970-01-01
  • 2019-09-27
  • 1970-01-01
相关资源
最近更新 更多