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

如何在Matplotlib直方图添加条形标签?FIFA19数据集报错求助

解决Matplotlib直方图添加标签时的AttributeError问题

错误原因

plt.hist()函数返回的是一个三元组:(n, bins, patches),其中:

  • n:每个得分区间内的球员数量数组
  • bins:得分区间的边界值数组
  • patches:构成直方图的所有柱子对象集合

触发AttributeError: 'tuple' object has no attribute 'patches'的原因是你直接把整个返回的元组当成柱子对象调用.patches属性,而元组本身没有这个属性。

修复后的完整代码示例

import pandas as pd
import matplotlib.pyplot as plt

# 读取本地FIFA19数据集CSV文件
df = pd.read_csv("fifa19.csv")  # 替换为你的本地文件路径
# 提取技能得分列(示例用Overall总评得分,可替换为你需要的技能列)
skill_scores = df["Overall"]

# 绘制直方图并解包返回的元组
counts, bins, patches = plt.hist(skill_scores, bins=12)  # bins参数可按需调整区间数量

# 为每个柱子添加数量标签
for patch, count in zip(patches, counts):
    # 计算标签的位置:柱子水平居中,垂直在柱子顶部上方
    x_pos = patch.get_x() + patch.get_width() / 2
    y_pos = patch.get_height() + 0.5  # +0.5避免标签和柱子重叠
    # 添加文本标签
    plt.text(x_pos, y_pos, int(count), ha="center", va="bottom")

# 设置图表基础信息
plt.xlabel("技能得分区间")
plt.ylabel("球员数量")
plt.title("FIFA19球员技能得分分布")
plt.show()

关键逻辑解释

  1. 元组解包:必须把plt.hist()的返回值拆分成三个变量,单独拿到patches(柱子对象)和counts(区间数量),才能遍历配对添加标签。
  2. 标签位置计算:
    • patch.get_x()获取柱子左边缘x坐标,加上柱子宽度的一半实现水平居中
    • patch.get_height()获取柱子高度,加一个小偏移量让标签显示在柱子上方,避免重叠
    • ha="center"和va="bottom"确保标签在目标位置对齐
  3. 数据类型处理:把count转成整数,因为球员数量是整数,显示更直观

内容的提问来源于stack exchange,提问作者David Eler

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 00:52:42