seaborn jointplot 边距不适用于对数轴

1 python matplotlib seaborn jointplot

我试图通过以下方式绘制:

g = sns.jointplot(x = etas, y = vs, marginal_kws=dict(bins=100), space = 0)
g.ax_joint.set_xscale('log')
g.ax_joint.set_yscale('log')
g.ax_joint.set_xlim(0.01)
g.ax_joint.set_ylim(0.01)
g.ax_joint.set_xlabel(r'$\eta$')
g.ax_joint.set_ylabel("V")

plt.savefig("simple_scatter_plot_Seanborn.png",figsize=(8,8), dpi=150)
Run Code Online (Sandbox Code Playgroud)

这给我留下了以下图像:

阴谋

这不是我想要的。为什么最后要填充直方图?那里没有数据点,所以我不明白......

mwa*_*kom 5

您正在 matplotlib 轴上设置对数刻度,但在您执行此操作时,seaborn 已经计算了直方图。因此,线性空间中的等宽 bin 看起来具有不同的宽度;最低的箱的实际值范围很窄,但这在水平图上占用了大量空间。

测试于python 3.10, matplotlib 3.5.1,seaborn 0.11.2

解决方案:传递log_scale=True到直方图:

import seaborn as sns

# test dataset
planets = sns.load_dataset('planets')

g = sns.jointplot(data=planets, x="orbital_period", y="distance", marginal_kws=dict(log_scale=True))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

  • 不使用marginal_kws=dict(log_scale=True)

在此输入图像描述

  • 与创建绘图后设置比例相比。
import seaborn as sns

# test dataset
planets = sns.load_dataset('planets')

g = sns.jointplot(data=planets, x="orbital_period", y="distance", marginal_kws=dict(log_scale=True))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述