用pandas和matplotlib按天分组绘制时间序列箱线图丢失X轴日期如何解决?
问题原因
- 第一种实现丢失X轴日期标签,是因为拼接分组数据时没有将分组对应的日期设置为DataFrame的列名,最终绘图时X轴只能读取默认的数值序列作为标签。
- 第二种实现出现跨月同日数据堆叠,是因为
index.day仅提取了日期中的日数值,不同月份的相同日会被识别为同一类别。
最简实现方案
方案1:pandas自带绘图工具(代码量最少)
直接使用boxplot的by参数指定按天分组,无需手动拼接分组数据:
import pandas as pd import matplotlib.pyplot as plt df.boxplot(by=pd.Grouper(freq='D'), column='Temp', figsize=(20,5)) # 移除默认生成的冗余分组标题 plt.suptitle('') # 可选:调整标签样式避免重叠 plt.xticks(rotation=45, ha='right') plt.xlabel('日期') plt.ylabel('温度') plt.show()
方案2:Seaborn实现(样式更美观)
新增精确到天的日期列作为X轴维度,自动区分不同月份的日期:
import seaborn as sns import matplotlib.pyplot as plt # 生成精确到天的日期字符串,作为X轴分类依据 df['date'] = df.index.strftime('%Y-%m-%d') plt.figure(figsize=(20,5)) sns.boxplot(x='date', y='Temp', data=df) plt.xticks(rotation=45, ha='right') plt.xlabel('日期') plt.ylabel('温度') plt.show()
两种方案都可以直接生成带正确日期标签的箱线图,不会出现跨月数据堆叠的问题,代码也更简洁易读。
内容的提问来源于stack exchange,提问作者Lleims
相关产品推荐
相关产品推荐

