将seaborn histplot x 轴中重叠的 bin 刻度转换为科学记数法

问题描述 投票:0回答:1

我有一个包含 100 行浮点数的数据框,范围从

0.000001
0.001986
,我希望将其绘制在 seaborn 直方图中,按类别分隔。我开始于,

sns.histplot(data=df, x='score', hue='test_result', kde=True, color='red', 
             stat='probability', multiple='layer')
plt.show()

但是,我的垃圾箱明显重叠。我补充说,

binwidth=0.000000001

到 histplot 将 bin 缩放为科学记数法,但此代码运行了 2 个多小时。

我的问题是;有没有一种更计算效率的方法来进行这种转换?我需要对大小相似的多个数据帧运行相同的代码。如果没有,是否有更好的方法来提高 x 轴 bin 的可读性,而不是使用科学记数法?谢谢!

python matplotlib seaborn scientific-notation histplot
1个回答
0
投票

由于这个问题已经重新提出,我将在下面提供我的答案。

sns.histplot(data=df, x='score', hue='test_result', kde=True, 
             color='red', stat='probability', multiple='layer')
plt.ticklabel_format(axis='x', style='sci', scilimits=(-4,-4))
plt.show()

我的理解是,在这里我用科学符号表示直方图 x 轴上的 bin,而不是尝试通过将

binwidth
设置为
0.000000001
来强制科学符号转换。

值得注意的是(如果评论可以提供解释),在类似的用例中,我的一位同事在旧版本的 seaborn/matplotlib 上有一些使用

binwidth
方法工作的旧代码。怎么办?

对于那些具有相同重叠垃圾箱问题的人,根据我的数据,这将比例转换为 5 的倍数 (1e-4),解决了上述问题以及 JohanC 在评论中提到的问题。来自关于

scilimits
的 matplotlib 文档:

使用 (0, 0) 包含所有数字。使用 (m, m)(其中 m != 0)来修复 数量级达到10m。格式化程序默认为

rcParams["axes.formatter.limits"]
(默认:
[-5, 6]
)。

© www.soinside.com 2019 - 2024. All rights reserved.