使用matplotlib读取CSV绘图时y轴数值乱序且转float报错如何解决
问题解决方案
错误原因排查
你遇到的问题由三个共同原因导致:
- 代码缺失
csv模块导入语句,本身无法正常运行 - 未跳过CSV第一行表头,遍历读取到表头的
sales字符串,尝试转float时触发ValueError - 未做类型转换时y轴数据为字符串类型,matplotlib会按字符串读取顺序排列y轴刻度,不会按数值大小排序,因此出现y轴数值排序异常的问题
修正后完整代码
import csv import matplotlib.pyplot as plt x = [] y = [] with open('sales.csv','r') as sales_csv: plots = csv.reader(sales_csv, delimiter=',') # 跳过第一行表头 next(plots) for row in plots: # 去除字段前后多余空格后添加到x列表 x.append(row[1].strip()) # 销售额转换为float类型后添加到y列表 y.append(float(row[2].strip())) plt.plot(x, y, color='r', label='Monthly Sales 2018', marker='o') plt.xlabel('Month') plt.ylabel('Sales') plt.title('Monthly Sales 2018') plt.legend() plt.show()
关键修改说明
- 新增
import csv语句,补全CSV读取所需的依赖模块 - 调用
next(plots)方法读取并丢弃CSV第一行表头,避免读取到表头字段导致类型转换失败 - 读取字段时统一调用
strip()去除前后多余空格,避免CSV字段间的空格导致显示或转换异常 - 销售额字段转换为float类型,保证matplotlib按数值大小对y轴排序,显示正常的折线趋势
内容的提问来源于stack exchange,提问作者Cristina
相关产品推荐
相关产品推荐

