制作带顶部数值的垂直条形图及解决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()
关键修改说明
切换为垂直条形图
你之前的代码生成水平条形图,是因为把数值字段score放在了x参数,类别字段subject放在y参数。只需要调换两者的位置,让类别在x轴、数值在y轴,条形就会变成垂直方向。修复轴对象访问错误
你遇到的'AxesSubplot' object is not subscriptable报错,是因为当前sns.barplot返回的是单个绘图轴对象,不是多子图网格。直接用变量g就能操作当前轴,不需要g.axes[0,0]这种下标访问——只有当你开启col="dataset"这类多子图参数时,返回的FacetGrid对象才需要通过axes属性获取子图。批量添加数值标签
由于你的图有hue分组(不同pipeline),绘图后会生成多个条形容器(每个分组对应一组条形)。循环遍历所有容器并调用bar_label,就能给每个条形顶部都添加上数值。通过fmt参数可以控制数值格式,比如fmt='%d'显示整数,fmt='%.2f'保留两位小数。
内容的提问来源于stack exchange,提问作者tareq ali
相关产品推荐
相关产品推荐

