求助:使用Matplotlib绘制城市高低温图时Y轴数值混乱问题
问题:Matplotlib绘制城市高低温图表时Y轴数值混乱
尝试绘制阿拉巴马州2016年1月10日各城市的高低温图表,发现Y轴数值无序跳跃,无法按正常递增顺序排列,数据点未沿正确轴分布。
实现代码
fig, al = plt.subplots() al.scatter(al_cities, al_min) al.scatter(al_cities, al_max, c='red') al.plot(al_cities, al_min, c='lightblue') al.plot(al_cities, al_max, c='orange') al.fill_between(al_cities, al_max, al_min, facecolor='gray', alpha=.3) al.set_title('Highs and Lows in Alabama on January 10, 2016', fontsize=18) al.set_xlabel('City', fontsize=14) al.set_ylabel('Temperature', fontsize=14)
问题现象
生成的图表中Y轴数值无序跳跃,未按数值大小递增排列。
解决方法
核心原因
al_min和al_max为字符串类型,而非数值类型(整数/浮点数)。Matplotlib会将字符串当作分类数据处理,导致Y轴按字符串字典序排序,而非数值大小排序。
具体修复步骤
- 转换温度数据为数值类型
直接将列表中的字符串转为浮点数(或整数,根据数据格式调整):al_min = [float(temp) for temp in al_min] al_max = [float(temp) for temp in al_max] - 读取数据时指定类型(若从文件读取)
如果数据来自CSV/Excel,用pandas读取时直接指定温度列的数值类型,避免后续转换:import pandas as pd # 假设数据列名为min_temp和max_temp df = pd.read_csv('your_data_source.csv', dtype={'min_temp': float, 'max_temp': float}) al_min = df['min_temp'].tolist() al_max = df['max_temp'].tolist() - 重新运行绘图代码,Y轴即可按数值大小正常递增显示。
内容的提问来源于stack exchange,提问作者Mako3
相关产品推荐
相关产品推荐

