【问题标题】:How do I set a custom y_scale for scatterplots using Seaborn如何使用 Seaborn 为散点图设置自定义 y_scale
【发布时间】:2021-03-23 04:50:07
【问题描述】:

我想制作一个散点图,我可以在其中设置我的 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") 

【问题讨论】:

  • 谢谢你,我可以让它工作了!我仍然是使用 numpy.random 复制随机数据并将其设为对数的新手,但您向我展示的内容很棒,我将继续使用它。

标签: seaborn scatter-plot


【解决方案1】:

您需要“捕捉”在散点图中使用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()

【讨论】:

  • 回头看我的代码,其实我只用了ax.set_ytick,没有ax.set_yticklabels,所以没用。 plt.tight_layout() 是做什么的?
  • tight_layout 尝试将所有标签(以及可能的外部图例)放入绘图中,而不切断部分,也不会留下太多空白。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-28
  • 2019-09-26
  • 1970-01-01
  • 1970-01-01
  • 2020-12-04
  • 2019-12-27
相关资源
最近更新 更多