0

我正在使用 IPython 或 Python shell 与 matplotlib 交互。我有两个DataFrames。每个都有一个月份的索引'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()有问题。

4

1 回答 1

3

编辑:您应该定义一个如下所示的函数,因为限制是matplotlib不允许您在使用时共享 y 轴,twinx这听起来可能是问题所在:

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 在第 1 部分结束 nans 在第 2 部分结束

于 2013-08-09T18:43:07.520 回答