You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何调试图表未正确展示数据问题?Y轴数值定义异常

问题解决:Matplotlib柱状图Y轴异常及数据展示错误

问题根源

  1. 献血量字段是带单位的字符串:你插入的Qty_needed数据(比如'3L')是字符串类型,Matplotlib无法将字符串解析为数值,导致Y轴无法正确识别刻度,出现错乱。
  2. 未按血型汇总数据:当前代码直接使用每条患者记录的献血量,同一个血型会生成多个独立柱子,无法展示各血型的总献血量。
  3. 使用数字索引列易出错: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 19:20:18