我有一个包含 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 的可读性,而不是使用科学记数法?谢谢!
由于这个问题已经重新提出,我将在下面提供我的答案。
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]