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

Matplotlib pyplot绘图出现异常阴影问题求助

问题分析与解决

你遇到的“阴影”其实是重复的刻度标签叠加导致的。问题出在ax.set_xticklabels(index_labels)这一行:你创建了和smoothed数据长度完全一致的标签数组,但matplotlib自动生成的x轴刻度数量远小于这个长度,每个刻度会被循环应用多个标签,叠加后就出现了模糊的阴影效果。

解决方法

不要手动生成全量标签,而是针对matplotlib实际生成的x轴刻度位置来设置对应标签,或者直接用matplotlib的日期处理工具来自动格式化时间刻度(从你的标签逻辑看是按年的时间序列数据)。

方案1:匹配实际刻度位置设置标签

先获取当前轴的x刻度位置,再对应生成标签:

import numpy as np
import matplotlib.pyplot as plt

# 保留你的原始数据处理代码
index_labels = np.empty(len(smoothed), dtype=object)
for i in range(len(index_labels)):
    index_labels[i] = ""
    if i%365 == 0:
        index_labels[i] = 2015 + int(i//365)

plt.scatter(smoothed.index, smoothed.national, label='PV load factor rolling mean over 24h.')
plt.plot(smoothed.index, sin_ref, color='red', label='Sinusoidal reference')
ax = plt.gca()

# 修改标签设置逻辑:仅针对实际刻度位置生成标签
xticks_pos = ax.get_xticks()
new_labels = []
for pos in xticks_pos:
    i = int(pos)
    if 0 <= i < len(index_labels):
        new_labels.append(index_labels[i])
    else:
        new_labels.append("")
ax.set_xticklabels(new_labels)

plt.legend()
plt.show()

方案2:用matplotlib日期工具自动格式化(推荐)

如果smoothed.index是datetime类型,直接用日期格式化工具更简洁高效:

import matplotlib.pyplot as plt
import matplotlib.dates as mdates

# 绘图代码
plt.scatter(smoothed.index, smoothed.national, label='PV load factor rolling mean over 24h.')
plt.plot(smoothed.index, sin_ref, color='red', label='Sinusoidal reference')
ax = plt.gca()

# 设置每年显示一次刻度,并格式化成年份
ax.xaxis.set_major_locator(mdates.YearLocator())
ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y'))

plt.legend()
plt.show()

参考图示

变量说明图:
变量说明图

绘图放大图(显示标签重叠阴影):
绘图放大图

内容的提问来源于stack exchange,提问作者FuriousHelicopter

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 14:50:34