python - Seaborn plot displot with hue 和双 y 尺度 (twinx)
问题描述
我正在尝试绘制 ML 模型预测的输出,目标有 1,0 类和分数。由于数据集不平衡,因此很少有 1。
当我在色调参数中使用 Target 绘制一个简单的分布图时,该图对于描述 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()
我想在同一个图中更改 1 的比例,右侧有第二个 y 比例和 twinx。
我已经尝试了以下代码,可以用 2 个地块解决问题,但我只需要一个地块。我无法使用双胞胎。
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()
g = sns.FacetGrid(df, hue='Target')
g = g.map(sns.displot, 'Score', bins=30, linewidth=0, height=3, kde=True, aspect=1.6)
一个可重现的例子可能是 Titanic 数据集:
df_ = sns.load_dataset('titanic')
sns.displot(df_, x='fare', hue='survived', bins=30, linewidth=0, height=5, kde=True, aspect=1.6)
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()
解决方案
要比较具有不同观察次数的分布形状,您可以通过设置 对它们进行归一化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
)
两个分布的峰值不在同一个 y 值上,但这是数据的一个真实特征:幸存者群体分布在更广泛的票价范围内,并且在较低端的聚集较少。拥有两个独立的 y 轴并缩放它们以使每个分布的峰值高度相等会产生误导。
推荐阅读
- usage-statistics - 有关 azure 分析服务上的用户连接的详细信息
- javascript - v-list-group 中的附加按钮
- java - 适用于 java 1.7 的 AWS 开发工具包
- spring-boot - Vue数据区分同名的不同id
- javascript - WebApi 在 iOS Safari 和 Chrome 上的文件上传时抛出 400 异常
- caching - 即使可变标头匹配,浏览器 cache.match() 也会意外失败
- android - MS Word 删除了对 Android 11 上文件内容的访问权限
- c# - CRM 动态插件访问网络文件夹
- django - Django重定向没有重定向
- docker - 在 azure devops 中构建 Docker 映像时如何传递 PAT 令牌?