Nap*_*tés 3 python distribution histogram seaborn displot
我正在尝试绘制 ML 模型预测的输出,目标有 1,0 类,以及分数。由于数据集不平衡,所以 1 很少。
当我用色调参数中的目标绘制一个简单的图表时,该图对于描述 1 是没有用的
sns.set_theme()
sns.set_palette(sns.color_palette('rocket', 3))
sns.displot(df, x='Score', hue='Target', bins=30, linewidth=0, height=5, kde=True, aspect=1.6)
plt.show()
Run Code Online (Sandbox Code Playgroud)
我想更改同一图中 1 的比例,并在右侧使用 twinx 更改第二个 y 比例。
我尝试过以下代码,可以解决 2 个图的问题,但我只需要一个图。我无法使用 twinx。
g = sns.displot(df, x='Score', col='Target', bins=30, linewidth=0, height=5, kde=True, aspect=1.6, facet_kws={'sharey': False, 'sharex': False})
g.axes[0,1].set_ylim(0,400)
plt.show()
Run Code Online (Sandbox Code Playgroud)
g = sns.FacetGrid(df, hue='Target')
g = g.map(sns.displot, 'Score', bins=30, linewidth=0, height=3, kde=True, aspect=1.6)
Run Code Online (Sandbox Code Playgroud)
一个可重现的例子可以是泰坦尼克号数据集:
df_ = sns.load_dataset('titanic')
sns.displot(df_, x='fare', hue='survived', bins=30, linewidth=0, height=5, kde=True, aspect=1.6)
Run Code Online (Sandbox Code Playgroud)
g = sns.displot(df_, x='fare', col='survived', bins=30, linewidth=0, height=5, kde=True, aspect=1.6, facet_kws={'sharey': False, 'sharex': False})
g.axes[0,1].set_ylim(0,150)
plt.show()
Run Code Online (Sandbox Code Playgroud)
要比较具有不同数量的观测值的分布形状,您可以通过设置 对它们进行归一化stat="density"。默认情况下,这使用相同的分母对每个分布进行标准化,但您可以通过设置独立地对每个分布进行标准化common_norm=False:
sns.displot(
titanic, x='fare', hue='survived',
bins=30, linewidth=0, kde=True,
stat="density", common_norm=False,
height=5, aspect=1.6
)
Run Code Online (Sandbox Code Playgroud)
两个分布的峰值并不位于相同的 y 值,但这是数据的真实特征:幸存者群体分布在更广泛的票价范围内,并且较少聚集在较低端。拥有两个独立的 y 轴并缩放它们以均衡每个分布峰值的高度可能会产生误导。