我正在尝试使用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)
这会产生:
这可以并排绘制4个图形,这是我想要的,但是两列都使用相同的y轴我希望“计数”列使用左侧的公共y轴和'值'列使用右侧的公共辅助y轴。
有人可以建议一种方法吗?到目前为止,我的尝试导致每个图形都有自己独立的y轴。
答案 0 :(得分:1)
要创建辅助y轴,您可以使用twinax = ax.twinx()
。然后,可以通过轴join
,Grouper
的{{1}}方法加入这些双轴。有关详细信息,请参阅this question。
接下来的问题是让两个不同的条形图彼此相邻。由于我不认为有办法使用pandas绘图包装器,可以使用matplotlib条形图,它允许定量指定条形位置。然后左杆的位置将移动杆宽。
twinax.get_shared_y_axes().join(twinax1, twinax2)