You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 13:45:04