如何基于Pandas为2020-2022年数据创建3个箱线图子图?
修改代码生成三年数据的箱线图子图
修改核心点:
- 将子图布局从1行2列调整为1行3列,对应三年的数据展示
- 添加2022年数据的箱线图绘制逻辑
- 统一子图的Y轴标签(原代码中两个子图标签不一致,此处修正为合理的统一标签)
- 优化布局避免标签重叠
修改后的完整代码(推荐写法,更规范):
df2020 = transport_data.loc['2020'] df2021 = transport_data.loc['2021'] df2022 = transport_data.loc['2022'] # 直接通过subplots创建1行3列的子图结构 fig, axs = plt.subplots(nrows=1, ncols=3, figsize=(18,7)) # 依次绘制三年数据的箱线图 df2020.boxplot(grid=False, rot=90, fontsize=10, ax=axs[0]) df2021.boxplot(grid=False, rot=90, fontsize=10, ax=axs[1]) df2022.boxplot(grid=False, rot=90, fontsize=10, ax=axs[2]) # 批量设置子图的标签与标题 for ax, year in zip(axs, ['2020', '2021', '2022']): ax.set_ylabel('乘客数量', fontsize=12) ax.set_title(year, fontsize=14) # 自动调整子图间距,防止标签被截断 plt.tight_layout() plt.show()
兼容原代码写法的修改版本:
df2020 = transport_data.loc['2020'] df2021 = transport_data.loc['2021'] df2022 = transport_data.loc['2022'] fig = plt.figure(figsize=(18,7)) # 调整为1行3列的子图索引 ax = [ plt.subplot(131), plt.subplot(132), plt.subplot(133)] df2020.boxplot(grid=False, rot=90, fontsize=10, ax=ax[0]) df2021.boxplot(grid=False, rot=90, fontsize=10, ax=ax[1]) df2022.boxplot(grid=False, rot=90, fontsize=10, ax=ax[2]) # 设置每个子图的标签与标题 ax[0].set_ylabel('乘客数量', fontsize=12) ax[1].set_ylabel('乘客数量', fontsize=12) ax[2].set_ylabel('乘客数量', fontsize=12) ax[0].set_title('2020') ax[1].set_title('2021') ax[2].set_title('2022') plt.tight_layout() plt.show()
内容的提问来源于stack exchange,提问作者jorge
相关产品推荐
相关产品推荐

