我正在使用IPython或Python shell与matplotlib进行交互。我有两个DataFrame
个。每个都有'YYYY-MM'
格式的月份索引(这些只是字符串)。其余列是不同值的总和。
一个DataFrame
包含2012年数据,另一个包含2013年数据。自2013年以来,2013年的许多月份都有零。
我想要创建的图表一次只使用一个指标,并将2013年数据显示为条形,将2012年数据显示为一条线。我希望两个图形相互叠加,并分享x轴和y轴。我还希望条形图集中在每个数据点上。
2013年数据中的空值似乎导致了问题。
以下是我在IPython中尝试过的示例:
df2012['metric'].plot(color='black')
bar(np.arange(len(df2013.index)), df2013['metric'], align='center')
我也尝试过使用twinx()
和twiny()
,但也有问题。
答案 0 :(得分:3)
编辑:你应该定义一个类似下面的函数,因为限制是matplotlib
在使用twinx
时不允许你共享y轴,这听起来像问题可能是:
from pandas.util.testing import makeTimeSeries as mkts
s = mkts()[:12].abs()
s2 = s[:7]
# align the series fill missing with nans
s, s2 = s.align(s2)
x = s.index.to_pydatetime()
y1 = s.values
bar(x, y1, align='center')
def mytwinx(ax, *args, **kwargs):
ax2 = ax._make_twin_axes(*args, sharex=ax, frameon=False, **kwargs)
ax2.yaxis.tick_right()
ax2.yaxis.set_label_position('right')
ax2.yaxis.set_offset_position('right')
ax.yaxis.tick_left()
ax2.xaxis.set_visible(False)
return ax2
ax = gca()
ax2 = mytwinx(ax, sharey=ax)
y2 = s2.values
ax2.plot(x, y2, c='r', lw=2)
draw()
以下是使用此代码制作的两个图: