首页 > 解决方案 > 从多个数据框绘制 matplotlib 中的子图并标准化轴

问题描述

我在 python 中有 11 个数据框,它们具有相同的列,但按 DateTime 年份拆分行。这是我的数据框的两个示例:

_2008 = data[(data['fulldate'] > '2007-12-31') & (data['fulldate'] <= '2008-12-31')]
_2009 = data[(data['fulldate'] > '2008-12-31') & (data['fulldate'] <= '2009-12-31')]

从这些数据框中,我在 matplotlib 中创建如下图: 在此处输入图像描述

在此处输入图像描述

使用以下代码:

plt.plot('fulldate','num_recvd', data=_2009, color='black')
plt.title('Number of Requests in 2009')
plt.xlabel('Month', fontsize=10)
plt.ylabel('Number of Requests', fontsize=10)

'data=_2009' 因年份而异,因为每年的数据都包含在单独的数据框中。

我想创建一个带有与此类似的子图的图表:

在此处输入图像描述

但无法弄清楚如何做到这一点(我已经搜索了其他资源以寻找答案)。

我还想用 x 轴上的月份和 y 轴上的相同单位来标准化轴(有些年份的计数高达 ~47,而其他年份的计数高达 1 或 2)。

使用第一个答案中的代码,我得到了这个图:

在此处输入图像描述

标签: pythonpandasmatplotlibaxis-labelssubplot

解决方案


你应该使用pyplot.subplots. 这是一些演示代码。首先year在数据中创建一个字段,然后按该字段分组year并绘图,这样会更干净。

data.fulldate = pd.to_datetime(data.fulldate)
data['year'] = data.fulldate.dt.year

fig, axarr = plt.subplots(nrows=4, ncols=3, sharey=True)
axarr = axarr.flatten()

for i, (name, data_group) in enumerate(data.groupby('year')):
    ax = axarr[i]
    ax.plot('fulldate','num_recvd', data=data_group, color='black')
    ax.set_title('Number of Requests in ' + str(name))
    ax.set_xlabel('Month', fontsize=10)
    ax.set_ylabel('Number of Requests', fontsize=10)

请注意sharey = True第一行:这意味着所有 y 轴将共享相同的比例。


推荐阅读