如何将两个不同颜色的seaborn jointplot合并到同一画布
把两个Seaborn Jointplot合并到同一画布的解决方案
sns.jointplot每次调用都会自动创建新的Figure对象,所以你之前的代码会生成两张独立图。要把两个数据集的jointplot内容合并到同一画布,需要用Seaborn的JointGrid(jointplot的底层实现类)来手动构建绘图。
实现步骤
- 初始化JointGrid对象,指定x、y轴对应的列名;
- 分别调用
plot_joint和plot_marginals方法,叠加两个数据集的散点图和边缘分布; - 添加图例区分不同数据集,最后显示图形。
示例代码
import seaborn as sns import matplotlib.pyplot as plt # 初始化JointGrid,基于df的列定义坐标轴 g = sns.JointGrid(x=column_headers[4], y=column_headers[6], data=df) # 绘制第一个数据集(df)的散点图和边缘直方图 g.plot_joint(sns.scatterplot, data=df, color="blue", label="df") g.plot_marginals(sns.histplot, data=df, color="blue", alpha=0.5) # 绘制第二个数据集(typesatt[0])的散点图和边缘直方图 g.plot_joint(sns.scatterplot, data=typesatt[0], color="red", label="typesatt[0]") g.plot_marginals(sns.histplot, data=typesatt[0], color="red", alpha=0.5) # 添加图例 g.ax_joint.legend() # 展示图形 plt.show()
可选调整
- 如果想用密度图代替直方图,把
sns.histplot换成sns.kdeplot即可; - 调整
alpha参数可以让边缘分布的叠加效果更清晰; - 可以通过
g.set_axis_labels()自定义坐标轴标签。
内容的提问来源于stack exchange,提问作者Abdelrahman Darwish
相关产品推荐
相关产品推荐

