如何为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
相关产品推荐
相关产品推荐

