如何在Seaborn JointGrid边际图中同时展示两个数据集的分布
解决两个数据集在JointGrid中边际分布重叠覆盖的问题
要同时展示两个数据集的边际分布用于对比,核心是给第二个数据集的边际分布设置透明度(alpha),避免直接覆盖第一个数据集的分布。以下是具体实现代码:
import seaborn as sns import matplotlib.pyplot as plt # 初始化JointGrid,指定第一个数据集的x、y字段 g = sns.JointGrid(data=data1, x="observed", y="predicted") # 绘制第一个数据集的散点图和边际直方图 g.plot_joint(sns.scatterplot, color="#1f77b4", label="数据集1") g.plot_marginals(sns.histplot, color="#1f77b4", alpha=0.7, label="数据集1") # 添加第二个数据集的散点图(红色) g.ax_joint.scatter(data=data2, x="observed", y="predicted", color="#ff4b5c", label="数据集2") # 绘制第二个数据集的边际直方图,设置透明度让两个分布重叠可见 # X轴边际 g.ax_marg_x.hist(data2["observed"], color="#ff4b5c", alpha=0.5, label="数据集2") # Y轴边际(修正你之前的错误:应该用predicted字段而非observed) g.ax_marg_y.hist(data2["predicted"], color="#ff4b5c", alpha=0.5, orientation="horizontal", label="数据集2") # 添加图例区分两个数据集 g.ax_joint.legend() g.ax_marg_x.legend() g.ax_marg_y.legend() plt.show()
关键细节说明:
- 修正代码错误:你之前绘制Y轴边际分布时误用了
observed字段,改为predicted才能对应Y轴的预测值分布。 - 透明度的作用:设置
alpha=0.5让两个数据集的边际分布重叠区域半透明显示,既不会互相遮挡,又能直观对比分布差异。 - 图例辅助区分:给每个绘图元素添加
label并调用legend(),可以明确区分两个数据集的对应图形。
如果偏好核密度估计图(KDE)代替直方图,也可以替换成以下写法:
# 替换边际分布为KDE图 g.ax_marg_x.kdeplot(data2["observed"], color="#ff4b5c", alpha=0.7, label="数据集2") g.ax_marg_y.kdeplot(data2["predicted"], color="#ff4b5c", alpha=0.7, vertical=True, label="数据集2")
内容的提问来源于stack exchange,提问作者PW14
相关产品推荐
相关产品推荐

