使用Pandas与Matplotlib绘图无报错但图表无数据显示求助
问题排查与修正方案
核心问题分析
plt.bar参数传递错误:plt.bar()要求分别传入x轴数据和对应高度数据,你直接把整个DataFrame传进去,Matplotlib无法正确解析,导致无数据显示。- 高度参数固定值无效:
height=1是固定值,就算能显示,也看不到实际病假时长的差异,完全失去了图表的意义。 - 标题与内容不符:标题写的是“不同人员的年龄”,但实际要展示的是病假时长,逻辑混乱。
- 图例调用无意义:
plt.legend()没有指定任何标签,单组柱状图不需要额外图例,调用后只会显示空图例。 - 未验证数据加载状态:你没有确认CSV文件是否正确读取,比如列名是否匹配、是否有有效数据,可能数据本身就没加载进来。
修正后的代码
import matplotlib.pyplot as plt import pandas as pd # 读取数据并先验证结构 sickpay = pd.read_csv('sickleavedata.csv', index_col=0) print(sickpay.head()) # 打印前几行确认数据是否正确加载 # 提取x轴和高度数据 job_titles = sickpay.index # 索引为JobTitle,作为x轴 sick_hours = sickpay['SickLeaveHours'] # 替换为你CSV中实际的病假时长列名 # 绘制柱状图 plt.bar(job_titles, sick_hours) plt.xlabel('JobTitle') plt.ylabel('SickLeaveHours') plt.title('Sick Leave Hours by Job Title') plt.xticks(rotation=45) # 旋转x轴标签,避免长职位名重叠 plt.tight_layout() # 自动调整布局,防止标签被截断 plt.show()
额外注意事项
- 确认CSV文件中的列名是否为
SickLeaveHours,如果不是,要替换成实际列名。 - 如果x轴标签太多导致重叠,
plt.xticks(rotation=45)可以解决这个问题。 - 运行代码前先看
print(sickpay.head())的输出,确保数据正确加载,没有出现空值或列名错误。
内容的提问来源于stack exchange,提问作者Luke Shute
相关产品推荐
相关产品推荐

