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

制作带顶部数值的垂直条形图及解决AxesSubplot下标报错问题

解决垂直条形图带顶部数值的问题

先给你可以直接运行的完整代码,包含垂直条形图绘制和顶部数值标签添加:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

# 模拟示例数据集(替换成你的results数据即可)
results = pd.DataFrame({
    "subject": ["Math", "English", "Science"]*2,
    "score": [85, 78, 92, 88, 81, 90],
    "pipeline": ["A", "A", "A", "B", "B", "B"]
})

# 绘制垂直条形图:调换x和y参数的位置
g = sns.barplot(
    x="subject",
    y="score",
    hue="pipeline",
    data=results,
    palette="viridis", 
)

# 给每个条形顶部添加数值标签
for container in g.containers:
    g.bar_label(container, fmt='%.1f')  # 按需调整数值格式

plt.title("Subject Scores by Pipeline")
plt.show()

关键修改说明

  1. 切换为垂直条形图
    你之前的代码生成水平条形图,是因为把数值字段score放在了x参数,类别字段subject放在y参数。只需要调换两者的位置,让类别在x轴、数值在y轴,条形就会变成垂直方向。

  2. 修复轴对象访问错误
    你遇到的'AxesSubplot' object is not subscriptable报错,是因为当前sns.barplot返回的是单个绘图轴对象,不是多子图网格。直接用变量g就能操作当前轴,不需要g.axes[0,0]这种下标访问——只有当你开启col="dataset"这类多子图参数时,返回的FacetGrid对象才需要通过axes属性获取子图。

  3. 批量添加数值标签
    由于你的图有hue分组(不同pipeline),绘图后会生成多个条形容器(每个分组对应一组条形)。循环遍历所有容器并调用bar_label,就能给每个条形顶部都添加上数值。通过fmt参数可以控制数值格式,比如fmt='%d'显示整数,fmt='%.2f'保留两位小数。

内容的提问来源于stack exchange,提问作者tareq ali

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 07:25:23