Python Matplotlib绘图y轴平均线标签不显示、x轴日期拥挤问题求助
Matplotlib绘图两个问题的解决方案
问题1:平均值水平线的label不显示在图例中
原因
调用plt.legend()的时机早于plt.axhline(),生成图例时还未加载平均线的label信息,因此仅会包含之前绘制的折线标签。
解决方法
将plt.legend()语句移动到所有带label参数的绘图语句之后,也就是plt.axhline()的下方。
问题2:x轴日期拥挤堆叠
解决方法
可通过以下调整优化显示效果:
- 将日期列转换为datetime类型,让Matplotlib可以自动适配日期刻度
- 限制x轴显示的最大刻度数量,避免标签过度堆叠
- 给
plt.xticks()添加ha='right'参数,让旋转后的日期右对齐,避免文字溢出 - 调用
plt.tight_layout()自动调整子图布局,防止轴标签被画布截断
修改后的完整代码
import pandas as pd import matplotlib.pyplot as plt from matplotlib import dates as mdates def plot_data(measurement): df = pd.read_csv("out.csv") # 转换日期格式,方便Matplotlib处理 df["date"] = pd.to_datetime(df["date"]) date = df["date"] value = df[measurement] plt.plot(date, value, label=host[0:7] + ", " + measurement + ", " + date_til[0:10] + " " + date_from[11:19] + "-" + date_til[11:19]) plt.title(measurement) plt.xlabel("date") plt.ylabel(measurement) average = df[measurement].mean() # 绘制平均值线,保留两位小数优化显示 plt.axhline(y=average, color='r', linestyle='-', label=f"average Ø ≈ {average:.2f}") # 调整x轴刻度样式 plt.xticks(rotation=45, ha='right') # 最多显示10个日期刻度,可根据需求调整数值 plt.gca().xaxis.set_major_locator(mdates.MaxNLocator(10)) # 自定义日期显示格式 plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d')) # 移到所有绘图语句之后,保证所有label都能被收录 plt.legend() fig = plt.gcf() fig.set_size_inches(18.5, 10.5, forward=True) # 自动调整布局,避免标签被截断 plt.tight_layout() filename = "plots/plot_" + date_from[0:10] + ".png" fig.savefig(filename, dpi=100) print("\rPlot: Done ✔️")
内容的提问来源于stack exchange,提问作者Passi
相关产品推荐
相关产品推荐

