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

Matplotlib绘图正值显示为负值问题求助

问题分析与解决:Matplotlib Y轴显示异常(正值显示为负轴)

所有列表中的数值均为正值,但使用Matplotlib的plot或subplot方法绘制时,Y轴呈现出类似仅含负值的异常效果,截图如下:
问题截图

用户代码:

import matplotlib.pyplot as plt


xVal = []
yVal1 = []
yVal2 = []
yVal3 = []
data = []

# load data
with open(r"path", 'r') as f:
    data = f.readlines()

yVal1 = data[0].split(",")
yVal2 = data[1].split(",")
yVal3 = data[2].split(",")

del yVal1[-1]
del yVal2[-1]
del yVal3[-1]

print(yVal1)
print(yVal2)
print(yVal3)

# graph dem bois
xVal = [*range(0, len(yVal1))]

'''fig, ax = plt.subplots(3)

ax[0].plot(xVal, yVal1)
ax[0].set_title("pm5")

ax[1].plot(xVal, yVal2)
ax[1].set_title("pm7.5")

ax[2].plot(xVal, yVal3)
ax[2].set_title("pm10")

fig.suptitle("Particulate Levels over time")'''

plt.plot(xVal, yVal3)
plt.show()

问题原因

从文件读取数据后,通过split(",")得到的是字符串类型的列表,而非数值类型(int/float)。Matplotlib处理字符串数据时,会将其视为离散类别进行编码,导致Y轴显示逻辑异常,出现类似负轴的效果。

解决方案

将分割后的字符串列表转换为数值类型,修改数据加载部分的代码即可:

基础写法

# 替换原有的yVal赋值代码
yVal1 = list(map(float, data[0].split(",")))
yVal2 = list(map(float, data[1].split(",")))
yVal3 = list(map(float, data[2].split(",")))

# 删除末尾空元素(如果数据行末尾有多余逗号)
del yVal1[-1]
del yVal2[-1]
del yVal3[-1]

严谨写法(处理空值/格式错误)

def str_to_num_list(s):
    # 过滤空字符串并转换为浮点型
    return [float(num.strip()) for num in s.split(",") if num.strip()]

yVal1 = str_to_num_list(data[0])
yVal2 = str_to_num_list(data[1])
yVal3 = str_to_num_list(data[2])

转换后,Matplotlib能正确识别数值数据,Y轴会正常显示正值范围。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 09:41:32