一尘不染

带有 kind="hex" 的对数刻度上的 Seaborn jointplot 轴

py

我想显示下面的图表,但 x 轴在对数刻度上。

df = pd.DataFrame(np.random.randint(0,100,size=(100, 2)), columns=list('XY'))
sns.jointplot(data=df,x='X',y='Y',height=3,kind='hex')

在此处输入图像描述

需要明确的是,我不想先记录 X,而是希望数字保持不变,但轴之间的距离会发生变化。在 altair 中,它看起来像下面这样(我不能在 altair 中做十六进制,但如果我错了请纠正我):

在此处输入图像描述

编辑:Matt 建议添加 xscale=”log”。那让我很接近那里。我只需要一种从幂到普通整数的方法。

在此处输入图像描述


阅读 93

收藏
2023-01-27

共1个答案

一尘不染

您可以使用xscale="log"关键字参数,它会传递给 seaborn 在后台hexbin使用的 Matplotlib 函数。例如,

sns.jointplot(data=df, x='X', y='Y' ,height=3, kind='hex')

如评论中所述,有多种方法可以将轴刻度标签设置为非科学格式。最简单的

import matplotlib.ticker as mticker

grid = sns.jointplot(data=df, x='X', y='Y', height=3, kind='hex', xscale="log")
grid.ax_joint.xaxis.set_major_formatter(mticker.ScalarFormatter())

相反,如果您希望使用逗号将 1000 格式化为 1,000,您可以改为

grid.ax_joint.xaxis.set_major_formatter(mticker.StrMethodFormatter("{x:,.0f}"))
2023-01-27