使用Matplotlib创建YoY图

时间:2013-08-09 16:50:13

标签: python matplotlib pandas

我正在使用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(),但也有问题。

1 个答案:

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

以下是使用此代码制作的两个图:

nans at end part 1 nans at end part 2