Matplotlib多折线图Y轴显示异常问题求助
解决Matplotlib多折线图Y轴异常重复问题
问题描述
使用Matplotlib绘制多折线图时,预期Y轴数值范围为[0.0, 15.0],但near_proximity_image_data与far_proximity_image_data对应的折线显示异常,Y轴出现重复区间,left_image_data和right_image_data显示正常。
原代码
import matplotlib.pyplot as plt from datetime import datetime def image_graph(): left_image_data = ['10.31', '10.21', '10.13', '10.08', '10.1'] right_image_data = ['10.17', '10.14', '10.13', '10.1', '10.07'] near_proximity_image_data = ['9.257', '9.601', '9.688', '9.76', '9.824'] far_proximity_image_data = ['9.999', '9.997', '10.0', '10.0', '9.996'] image_data_x = [datetime.datetime(2023, 8, 19, 21, 30, 20, 876981), datetime.datetime(2023, 8, 19, 21, 30, 20, 877015), datetime.datetime(2023, 8, 19, 21, 30, 20, 877031), datetime.datetime(2023, 8, 19, 21, 30, 20, 877046), datetime.datetime(2023, 8, 19, 21, 30, 20, 877057)] plt.plot(image_data_x, left_image_data, label="left_image_data time rate") plt.plot(image_data_x, right_image_data, label="right_image_data time rate") plt.plot(image_data_x, near_proximity_image_data, label="near_proximity_image") plt.plot(image_data_x, far_proximity_image_data, label="far_proximity_image") plt.legend() plt.show() image_graph()
问题原因
所有Y轴数据均为字符串类型,Matplotlib会将字符串视为分类变量而非数值变量处理,导致Y轴刻度逻辑混乱,出现重复区间。
解决方案
将所有数据列表中的字符串转换为浮点数,让Matplotlib正确识别数值类型。
修改后的代码
import matplotlib.pyplot as plt from datetime import datetime def image_graph(): # 转换为浮点数列表 left_image_data = [float(val) for val in ['10.31', '10.21', '10.13', '10.08', '10.1']] right_image_data = [float(val) for val in ['10.17', '10.14', '10.13', '10.1', '10.07']] near_proximity_image_data = [float(val) for val in ['9.257', '9.601', '9.688', '9.76', '9.824']] far_proximity_image_data = [float(val) for val in ['9.999', '9.997', '10.0', '10.0', '9.996']] image_data_x = [datetime.datetime(2023, 8, 19, 21, 30, 20, 876981), datetime.datetime(2023, 8, 19, 21, 30, 20, 877015), datetime.datetime(2023, 8, 19, 21, 30, 20, 877031), datetime.datetime(2023, 8, 19, 21, 30, 20, 877046), datetime.datetime(2023, 8, 19, 21, 30, 20, 877057)] plt.plot(image_data_x, left_image_data, label="left_image_data time rate") plt.plot(image_data_x, right_image_data, label="right_image_data time rate") plt.plot(image_data_x, near_proximity_image_data, label="near_proximity_image") plt.plot(image_data_x, far_proximity_image_data, label="far_proximity_image") # 手动设置Y轴范围以符合预期 plt.ylim(0.0, 15.0) plt.legend() plt.show() image_graph()
说明
转换数据类型后,Matplotlib会自动按数值逻辑处理Y轴,也可以通过plt.ylim(0.0, 15.0)手动锁定Y轴范围,确保符合预期。
内容的提问来源于stack exchange,提问作者saibhaskar
相关产品推荐
相关产品推荐

