python - 从多个数据框绘制 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')]
使用以下代码:
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)。
使用第一个答案中的代码,我得到了这个图:
解决方案
你应该使用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 轴将共享相同的比例。
推荐阅读
- javascript - 如何设置具有多个复选框的表单,其中只有一个可以使用 Material-UI 组件“选中”?
- javascript - 无法访问 Firestore 文档的字段
- api - 访问公共 APIS 时的防火墙
- android - 当用户颤抖手机时如何唤醒应用程序
- python - 在 Python 上绘制史密斯图
- node.js - 无法从strapi database.js 文件中的.env 文件访问值
- javascript - 如何将选定的列表值放入vue中的数组中
- vue.js - 如何纠正 vue.js2 中的 isVueInstance is deprecated 错误?
- java - 从多模块项目中提取子项目名称
- java - 不使用控制器更新对象变量