如何用Pandas和Matplotlib绘制日期为X轴的每日箱线图
按日期绘制每日PM2.5统计箱线图(仅用Pandas+Matplotlib)
问题背景
已通过Pandas预处理得到2022年每日PM2.5的统计数据(包含min、q1、median、q3、max等列),希望绘制箱线图,让X轴显示全年日期,每个日期对应一个箱线。当前仅能将统计列作为X轴展示,需调整数据选择方式实现需求。
解决方案
1. 构建箱线图所需数据集
Matplotlib的boxplot函数接受二维数组作为输入:每一行对应一个类别(此处为单个日期)的箱线数据,顺序需为[最小值, 下四分位数(q1), 中位数(median), 上四分位数(q3), 最大值]。直接从现有DataFrame中提取对应列即可:
# 提取每个日期的min、q1、median、q3、max,按顺序组成二维数组 box_data = df[['min', 'q1', 'median', 'q3', 'max']].values
2. 绘制箱线图并配置X轴
使用Matplotlib绘制箱线图,将X轴刻度设置为对应的日期,并调整显示格式避免重叠:
import matplotlib.pyplot as plt # 创建画布,设置合适尺寸避免拥挤 fig, ax = plt.subplots(figsize=(18, 7)) # 绘制箱线图,patch_artist=True可自定义箱线填充颜色 ax.boxplot(box_data, vert=True, patch_artist=True) # 设置X轴刻度为日期,格式化为"月-日"简化显示,旋转45度避免重叠 ax.set_xticklabels(df.index.strftime('%m-%d'), rotation=45, fontsize=8) # 配置轴标签与标题 ax.set_xlabel('日期(2022年)', fontsize=10) ax.set_ylabel('PM2.5浓度', fontsize=10) ax.set_title('2022年每日PM2.5浓度分布箱线图', fontsize=12) # 自动调整布局,防止标签被截断 plt.tight_layout() plt.show()
说明
box_data的每一行对应一个日期的完整统计区间,boxplot会自动将其生成为单个箱线。- 通过
df.index直接获取日期作为X轴刻度,配合strftime格式化后,X轴将按日期顺序展示全年的箱线。 - 调整画布尺寸、刻度字体大小和旋转角度,可优化大量日期标签的显示效果。
内容的提问来源于stack exchange,提问作者Latex User 101
相关产品推荐
相关产品推荐

