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
相关产品推荐
相关产品推荐

