Python Matplotlib多数据集折线图共用Y轴显示异常问题
问题:Matplotlib多组折线图Y轴显示异常
我是Python新手,第一次用Matplotlib库。尝试在单张折线图中绘制多组数据集,但Y轴无法正常显示。X轴为秒级时间数据,Y轴为数值型数据,所有数据以字典键值对形式存储,值为列表。单独绘制一组数据时显示正常(Plot 1),但添加多组数据后,Y轴似乎为每组数据显示独立的数值范围(Plot 2)。我知道通常会使用numpy数组而非列表,但当前需沿用现有数据格式。此前查过类似问题案例,但遇到的情况与我不同。
代码如下:
import matplotlib.pyplot as plt kline_data_dict = {'time': ['14:27:00', '14:27:00', '14:27:00', '14:27:00', '14:27:02', '14:27:02', '14:27:02', '14:27:02', '14:27:04', '14:27:04'], 'open': ['20854.76000000', '20854.76000000', '20854.76000000', '20854.76000000', '20861.38000000', '20861.38000000', '20861.38000000', '20861.38000000', '20861.38000000', '20861.38000000'], 'close': ['20862.47000000', '20862.47000000', '20862.47000000', '20862.47000000', '20861.80000000', '20861.80000000', '20861.80000000', '20861.80000000', '20864.65000000', '20864.65000000'], 'high': ['20879.99000000', '20879.99000000', '20879.99000000', '20879.99000000', '20864.16000000', '20864.16000000', '20864.16000000', '20864.16000000', '20869.73000000', '20869.73000000'], 'low': ['20846.30000000', '20846.30000000', '20846.30000000', '20846.30000000', '20860.27000000', '20860.27000000', '20860.27000000', '20860.27000000', '20860.27000000', '20860.27000000']} plt.plot(kline_data_dict['time'], kline_data_dict['low']) plt.plot(kline_data_dict['time'], kline_data_dict['high']) plt.show()
解决方法
问题核心是Y轴数据为字符串类型,而非数值类型。Matplotlib处理字符串数据时会将其视为离散分类值,而非连续数值,导致多组数据叠加时出现独立的Y轴范围。
无需转换为numpy数组,直接将字典中数值类的字符串转为浮点数即可,保留原数据格式的处理代码如下:
import matplotlib.pyplot as plt kline_data_dict = {'time': ['14:27:00', '14:27:00', '14:27:00', '14:27:00', '14:27:02', '14:27:02', '14:27:02', '14:27:02', '14:27:04', '14:27:04'], 'open': ['20854.76000000', '20854.76000000', '20854.76000000', '20854.76000000', '20861.38000000', '20861.38000000', '20861.38000000', '20861.38000000', '20861.38000000', '20861.38000000'], 'close': ['20862.47000000', '20862.47000000', '20862.47000000', '20862.47000000', '20861.80000000', '20861.80000000', '20861.80000000', '20861.80000000', '20864.65000000', '20864.65000000'], 'high': ['20879.99000000', '20879.99000000', '20879.99000000', '20879.99000000', '20864.16000000', '20864.16000000', '20864.16000000', '20864.16000000', '20869.73000000', '20869.73000000'], 'low': ['20846.30000000', '20846.30000000', '20846.30000000', '20846.30000000', '20860.27000000', '20860.27000000', '20860.27000000', '20860.27000000', '20860.27000000', '20860.27000000']} # 将数值型字符串批量转为浮点数 for key in ['open', 'close', 'high', 'low']: kline_data_dict[key] = [float(val) for val in kline_data_dict[key]] plt.plot(kline_data_dict['time'], kline_data_dict['low'], label='Low') plt.plot(kline_data_dict['time'], kline_data_dict['high'], label='High') plt.xlabel('时间') plt.ylabel('价格') plt.legend() plt.show()
处理后Y轴会显示统一的连续数值范围,多组折线图可正常叠加显示。
内容的提问来源于stack exchange,提问作者formerlolz
相关产品推荐
相关产品推荐

