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

如何设置Ticklabel旋转角度并添加柱状图注释?绘图代码故障求助

解决带有注释的45度x轴标签柱状图问题

我来帮你搞定这个柱状图的问题!你的代码里有几个小疏漏导致没达到预期效果,咱们一步步调整:

关键问题分析与修复点

  • 坐标轴对象未定义:你注释掉了创建子图的fig, (ax1,ax2) = plt.subplots(...)代码,但后面还在使用ax=ax1,这会直接报错,得先把坐标轴对象正确定义出来。
  • x轴标签未设置旋转:缺少专门设置x轴标签旋转的代码,这是导致标签可读性差的核心原因。
  • 注释显示可优化:原注释的垂直对齐方式可能导致和柱子顶部重叠,微调一下会更美观。

修正后的完整代码

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

# 设置绘图风格和上下文参数
sns.set_context("paper", font_scale=2)
sns.set_style("ticks")
colors = ['b', 'g', 'r', 'c', 'm']

# 创建单张子图的画布和坐标轴(替换原注释掉的多子图代码,更贴合需求)
fig, ax1 = plt.subplots(1, 1, figsize=(12, 8))

# 绘制柱状图,指定坐标轴和配色
plots1 = sns.barplot(x="Model", y="G-mean", data=df_Aussel2014_5features, ax=ax1, palette='Spectral')

# 遍历柱子添加顶部数值注释
for bar in plots1.patches:
    plots1.annotate(format(bar.get_height(), '.2f'),
                    (bar.get_x() + bar.get_width() / 2, bar.get_height()),
                    ha='center', va='bottom',  # 改为底部对齐,避免和柱子重叠
                    size=12,  # 字体大小匹配全局font_scale
                    xytext=(0, 3),  # 微调向上偏移量
                    textcoords='offset points')

# 设置x轴标签旋转45度,并右对齐防止截断
ax1.tick_params(axis='x', rotation=45, labelsize=12)
ax1.set_xticklabels(ax1.get_xticklabels(), ha='right')

# 自动调整布局,避免标签或标题被画布截断
plt.tight_layout()

plt.show()
# 保存图片(按需启用)
# plt.savefig('Aussel2014_5features.png', dpi=300, transparent=False, bbox_inches='tight')

核心修改说明

  1. 修复坐标轴对象:创建了单张子图的ax1对象,确保绘图能正确关联到指定坐标轴。
  2. x轴标签优化:通过ax1.tick_params()设置旋转角度,同时用ha='right'让标签右对齐,避免长标签被画布边缘截断。
  3. 注释显示优化:把va='center'改成va='bottom',并微调偏移量,让数值注释稳稳地显示在柱子顶部,不会重叠。
  4. 布局调整:添加plt.tight_layout()自动适配元素位置,彻底解决标签截断问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.01 02:12:36