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

