Pandas和Matplotlib将df绘制为具有2个y轴的子图

时间:2017-07-01 08:56:23

标签: python pandas matplotlib

我正在尝试使用pandas和matplotlib.pyplot将数据框架绘制到几个子图。但我想让两列使用不同的y轴,并在所有子图之间共享。

目前我的代码是:

import pandas as pd
import matplotlib.pyplot as plt

df = pd.DataFrame({'Area':['A', 'A', 'A', 'B', 'B', 'C','C','C','D','D','D','D'],
              'Rank':[1,2,3,1,2,1,2,3,1,2,3,4],
              'Count':[156,65,152,70,114,110,195,92,44,179,129,76],
              'Value':[630,426,312,191,374,109,194,708,236,806,168,812]}
             )
df = df.set_index(['Area', 'Rank'])

fig = plt.figure(figsize=(6,4))

for i, l in enumerate(['A','B','C','D']):

if i == 0:
    sub1 = fig.add_subplot(141+i)

else:
    sub1 = fig.add_subplot(141+i, sharey=sub1)

df.loc[l].plot(kind='bar', ax=sub1)

这会产生:

graph output

这可以并排绘制4个图形,这是我想要的,但是两列都使用相同的y轴我希望“计数”列使用左侧的公共y轴和'值'列使用右侧的公共辅助y轴。

有人可以建议一种方法吗?到目前为止,我的尝试导致每个图形都有自己独立的y轴。

1 个答案:

答案 0 :(得分:1)

要创建辅助y轴,您可以使用twinax = ax.twinx()。然后,可以通过轴joinGrouper的{​​{1}}方法加入这些双轴。有关详细信息,请参阅this question

接下来的问题是让两个不同的条形图彼此相邻。由于我不认为有办法使用pandas绘图包装器,可以使用matplotlib条形图,它允许定量指定条形位置。然后左杆的位置将移动杆宽。

twinax.get_shared_y_axes().join(twinax1, twinax2)

enter image description here