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

Matplotlib同图绘制多条折线时后续线条起始位置异常问题求解

问题解决方法

核心原因

  • 你代码中Epoch、Scaled两个列表存储的都是字符串格式数据,Python3中matplotlib处理字符串类型的x轴输入时,会默认将其作为分类变量按传入顺序依次排列,不会自动识别为数值型时间戳坐标。
  • 每次循环往图中追加新折线时,新的字符串x值会被判定为新的分类,直接接在原有x轴分类的末尾,因此后续折线的起点就会承接前一条折线的结束位置,无法对齐到正确的时间坐标。

修复方案

  1. 绘图前先将Epoch和Scaled转换为浮点型数值,让matplotlib可以按照实际数值大小匹配x轴坐标
  2. 可以将全局样式、坐标轴参数设置移到循环外,避免重复执行冗余代码

修正后参考代码

import matplotlib
from matplotlib import pyplot

# 提前转换数据类型为数值型,解决x轴错位问题
Epoch = [float(x) for x in Epoch]
Scaled = [float(x) for x in Scaled]
Top = float(Top)
Btm = float(Btm)
BtmLimit = float(BtmLimit)
TopLimit = float(TopLimit)

# 全局样式设置放循环外
pyplot.rcParams['axes.facecolor'] = 'black' # 图表背景
pyplot.rcParams['axes.edgecolor'] = 'red'
fig = pyplot.figure()
fig.patch.set_facecolor('black') # 外边框

k = 0
while k < len(Stations):
    if Error == 'False': 
        pyplot.plot(Epoch, Scaled, color = Color, linewidth=1.9)
    k = k + 1

# 坐标轴、标题设置放循环外
pyplot.tick_params(axis='x', colors='yellow')
pyplot.tick_params(axis='y', colors='yellow')
pyplot.ylim(BtmLimit, TopLimit)
pyplot.ylabel("Percent of normal range.", size=10, color = "yellow")
pyplot.xticks([]) # 隐藏X轴
pyplot.title("Plotted at %sGMT, %s %s %s" % (thour, tday, tdate, tmonth), color = "yellow")
pyplot.plot(Epoch, [Top]*len(Epoch), color = [0,0.5,0]) # 绿色参考线
pyplot.plot(Epoch, [Btm]*len(Epoch), color = [0,0.5,0])

pyplot.savefig(SD+'RiverLevels.png', facecolor='black', bbox_inches='tight')
pyplot.show()
pyplot.close()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 11:15:10