Matplotlib绘图如何跳过部分x轴值降低图表数据密度
解决方法
无需修改原始DataFrame,绘图时对传入的数据集做步长为3的行切片即可实现「选取1天、跳过后续2天」的采样规则:切片语法[::3]会从第0行开始,每间隔2行取1行数据,全程不会改动原始存储的全量气象数据。
注意你原有代码中x轴刻度是基于全量数据行数计算的,采样后需要同步调整刻度计算逻辑,避免刻度错位、超出绘图范围。
修改后代码
import matplotlib.pyplot as plt import numpy as np fig, ax = plt.subplots() colors = ["Orange", "Blue"] # 生成临时采样数据,不修改原始weather_data sampled_weather = weather_data[::3] for i, col in enumerate(weather_data.columns): if col == "Date": continue ax.plot('Date', col, data=sampled_weather, color=colors[i], label=col) ax.set_xlabel("Date") ax.set_ylabel("Temperature (Celsius)") # 基于采样后的数据量设置15个均匀x轴刻度,避免标签重叠 ax.set_xticks(np.arange(0, sampled_weather.shape[0], sampled_weather.shape[0] / 15)) ax.legend() fig.autofmt_xdate() ax.set_title('Time Plot of Weather')
注意事项
- 切片操作
weather_data[::3]返回的是临时对象,不会对原始DataFrame做任何写入修改,完全符合不改动源数据的要求。 - 如果后续需要调整采样密度,直接修改切片步长即可:比如需要每7天取1天(周粒度采样),把步长改为
[::7]即可。 - 原代码中
col is "Date"的写法存在隐患,Python中字符串值相等判断应该用==,避免字符串驻留机制导致的判断失效。
内容的提问来源于stack exchange,提问作者Gunay Karaoglu
相关产品推荐
相关产品推荐

