如何使用 Seaborn 为散点图设置自定义 y_scale

How do I set a custom y_scale for scatterplots using Seaborn

我想制作一个散点图,我可以在其中设置 y_scale 并使其看起来像这样

然而,当我使用

import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
sns.scatterplot(data=df, y=df['y_target'], x=df['x_variable'], hue='cat')

我明白了。我只能设置 y_ticks 但它不会改变图像的缩放方式。反正有没有在 seaborn 中做到这一点?我可以将比例设置为对数,并通过下图获得更好的表示。但是,我仍然无法修改 y_ticks.

g = sns.scatterplot(data=df, y=df['y_target'], x=df['x_variable'], hue='cat')
g.set_yscale("log") 

您需要“捕捉”散点图中使用 ax = sns.scatterplot(...) 创建的子图。然后您需要同时设置对数刻度和所需的刻度。

您可以通过显式设置 ax.set_yticklabels(...) 或使用 FormatStrFormatter.

来格式化刻度
import matplotlib.pyplot as plt
from matplotlib.ticker import FormatStrFormatter
import seaborn as sns
import numpy as np
import pandas as pd

df = pd.DataFrame({'x_variable': np.random.uniform(-6, 6, 200),
                   'y_target': 10 ** np.random.uniform(-1.6, 3, 200),
                   'cat': np.random.choice([*'ABCD'], 200)})
ax = sns.scatterplot(data=df, y=df['y_target'], x=df['x_variable'], hue='cat', hue_order=[*'ABCD'])
ax.set_yscale('log')
ax.set_yticks([0.03, 0.1, 0.3, 1, 3, 10, 30, 100, 300, 1000])
# ax.set_yticklabels([0.03, 0.1, 0.3, 1, 3, 10, 30, 100, 300, 1000])
ax.yaxis.set_major_formatter(FormatStrFormatter('%g'))
plt.tight_layout()
plt.show()