Matplotlib折线图无法显示求助:三类年度费用折线图绘制失败
折线图无法显示的排查与解决
我有三类费用数据,想基于年份绘制3条折线的Matplotlib图表,但折线始终无法显示。以下是我的代码、输出和数据情况,请求协助排查:
实现代码
import numpy as np import matplotlib.pyplot as plt d = np.genfromtxt("Expenses.csv", delimiter=',',skip_header=1, dtype=[('year','i8'),('Type','U8'), ('Amount','i8')],missing_values=['na','-'],filling_values=[0]) print (d) x_rent = d[d['Type']=='rental']['year'] y_rent = d[d['Type']=='rental']['Amount'] x_salary = d[d['Type']=='salaries']['year'] y_salary = d[d['Type']=='salaries']['Amount'] x_others = d[d['Type']=='others']['year'] y_others = d[d['Type']=='others']['Amount'] fig = plt.figure() ax1 = fig.add_subplot(111) ax1.plot(x_rent, y_rent, c='b', label='rental') ax1.plot(x_salary,y_salary, c='r', label='salaries') ax1.plot(x_others,y_others, c='g', label='Others') plt.title('Expenses incurred',fontsize=10) plt.ylabel('Amount') plt.xlabel('Years') plt.legend(loc='upper right'); plt.show()
输出与数据情况
- 输出:仅显示空白的图表框架,无任何折线
- 数据样本:表格包含三列(Year、Type、Amount),Type列取值为
Rental、Salaries、Others,对应不同年份的金额数据
问题排查与修正
核心问题是字符串匹配不精确:
代码中用小写的'rental'、'salaries'、'others'做筛选,但实际数据里的Type是首字母大写的格式,导致筛选不到任何数据,x、y数组为空,自然画不出折线。
修正方案(二选一)
- 直接匹配数据中的大小写:
# 修正筛选条件的大小写 x_rent = d[d['Type']=='Rental']['year'] y_rent = d[d['Type']=='Rental']['Amount'] x_salary = d[d['Type']=='Salaries']['year'] y_salary = d[d['Type']=='Salaries']['Amount'] x_others = d[d['Type']=='Others']['year'] y_others = d[d['Type']=='Others']['Amount']
- 统一转换为小写后匹配(避免大小写差异问题):
# 统一转为小写再筛选 mask_rent = d['Type'].astype(str).str.lower() == 'rental' x_rent = d[mask_rent]['year'] y_rent = d[mask_rent]['Amount'] mask_salary = d['Type'].astype(str).str.lower() == 'salaries' x_salary = d[mask_salary]['year'] y_salary = d[mask_salary]['Amount'] mask_others = d['Type'].astype(str).str.lower() == 'others' x_others = d[mask_others]['year'] y_others = d[mask_others]['Amount']
额外验证建议
筛选后可以打印x、y数组确认是否有数据,比如print(x_rent, y_rent),若输出为空,说明筛选条件仍有问题;也可以用print(np.unique(d['Type']))查看所有Type的实际取值,排查拼写差异。
内容的提问来源于stack exchange,提问作者unleasehed
相关产品推荐
相关产品推荐

