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

如何为Seaborn水平条形图中数据已存在的Y轴数值设置两位小数格式?

解决Seaborn水平直方图Y轴显示两位小数的问题

要让Y轴只显示数据中存在的数值的两位小数形式,你可以通过两种简单的方式修改matplotlib的轴刻度设置,以下是具体实现:

方法一:手动设置刻度与格式化标签

这种方法可以精确控制只显示数据中存在的唯一值,并将它们格式化为两位小数:

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

df = pd.read_excel('file.xlsx', sheet_name='all')
# 获取数据中所有唯一的digits值
unique_digits = df['digits'].unique()
# 格式化为两位小数(默认是四舍五入逻辑)
formatted_labels = [f'{val:.2f}' for val in unique_digits]

# 绘制直方图
sns.histplot(y=df['digits'])
plt.xlabel("frequency", fontsize=15)
plt.ylabel("results", fontsize=15)
# 设置Y轴刻度为数据原始值,标签为格式化后的两位小数
plt.yticks(ticks=unique_digits, labels=formatted_labels)

plt.show()

如果需要截断小数(而非四舍五入),比如把0.93870显示为0.93而不是0.94,可以修改格式化逻辑:

formatted_labels = [f'{int(val * 100) / 100:.2f}' for val in unique_digits]

方法二:使用matplotlib格式化工具自动处理

这种方法更简洁,直接让Y轴的所有刻度自动显示为两位小数:

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from matplotlib.ticker import FormatStrFormatter

df = pd.read_excel('file.xlsx', sheet_name='all')

sns.histplot(y=df['digits'])
plt.xlabel("frequency", fontsize=15)
plt.ylabel("results", fontsize=15)
# 获取当前坐标轴,设置Y轴主刻度格式为两位小数
plt.gca().yaxis.set_major_formatter(FormatStrFormatter('%.2f'))

plt.show()

两种方法的区别

  • 方法一适合你需要严格只显示数据中存在的数值的场景,避免出现额外的刻度值;
  • 方法二更通用,无论Y轴有哪些刻度,都会统一格式化为两位小数,适合不需要严格限制刻度数量的情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 12:57:41