如何调试图表未正确展示数据问题?Y轴数值定义异常
问题解决:Matplotlib柱状图Y轴异常及数据展示错误
问题根源
- 献血量字段是带单位的字符串:你插入的
Qty_needed数据(比如'3L')是字符串类型,Matplotlib无法将字符串解析为数值,导致Y轴无法正确识别刻度,出现错乱。 - 未按血型汇总数据:当前代码直接使用每条患者记录的献血量,同一个血型会生成多个独立柱子,无法展示各血型的总献血量。
- 使用数字索引列易出错:
df[4]、df[5]这种数字索引可读性差,且如果DataFrame列顺序变化会直接出错。
修正步骤及代码
1. 从MySQL读取数据并处理数值
补全从数据库读取数据到DataFrame的代码,并处理Qty_needed字段:
import mysql.connector as mc import pandas as pd import matplotlib.pyplot as plt # 连接数据库(补充你的连接参数) mydb = mc.connect( host="你的主机地址", user="你的用户名", password="你的密码", database="你的数据库名" ) cursor = mydb.cursor() # 查询数据 cursor.execute("SELECT * FROM Patient") data = cursor.fetchall() df = pd.DataFrame(data, columns=['ID', 'PName', 'Phone', 'Age', 'BloodGrp', 'Qty_needed', 'Gender']) # 处理Qty_needed:去掉"L"后缀,转为浮点数 df['Qty_needed'] = df['Qty_needed'].str.replace('L', '').astype(float)
2. 按血型汇总总献血量
分组计算每个血型的总需求(献血量):
# 按BloodGrp分组,求和Qty_needed blood_group_total = df.groupby('BloodGrp')['Qty_needed'].sum().reset_index()
3. 绘制正确的柱状图
使用汇总后的数据绘图:
plt.title('各血型总献血量') plt.xlabel('血型 →') plt.ylabel('总献血量(L)→') plt.ylim(0, blood_group_total['Qty_needed'].max() + 1) # 自动适配最大值,留一点余量 plt.bar(blood_group_total['BloodGrp'], blood_group_total['Qty_needed'], color='coral') plt.show()
效果说明
修正后:
- Y轴会显示正确的数值刻度(0到对应血型的最大总献血量)
- 每个血型只显示一个柱子,代表该血型的总献血量
- 数据展示清晰,符合需求
内容的提问来源于stack exchange,提问作者Thakshaya
相关产品推荐
相关产品推荐

