如何使用 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()
我想制作一个散点图,我可以在其中设置 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()