我想显示下面的图表,但 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”。那让我很接近那里。我只需要一种从幂到普通整数的方法。
您可以使用xscale="log"关键字参数,它会传递给 seaborn 在后台hexbin使用的 Matplotlib 函数。例如,
xscale="log"
hexbin
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}"))