如何为Seaborn Jointplot的边际图添加均值线与标准差区间标记
解决方案
以下是修改后的代码,能在边际图中添加均值线和均值±1标准差的区间,同时保留Seaborn原有的风格:
import seaborn as sns import matplotlib.pyplot as plt sns.set_theme(style="darkgrid") tips = sns.load_dataset("tips") # 计算统计量:均值和标准差 x_mean = tips["total_bill"].mean() x_std = tips["total_bill"].std() y_mean = tips["tip"].mean() y_std = tips["tip"].std() # 生成jointplot g = sns.jointplot(x="total_bill", y="tip", data=tips, kind="reg", truncate=False, xlim=(0, 60), ylim=(0, 12), color="m", height=7) # 处理顶部边际图(x轴) # 添加均值竖线 g.ax_marg_x.axvline(x_mean, color="m", linestyle="--", linewidth=2) # 添加±1标准差的填充区间 g.ax_marg_x.axvspan(x_mean - x_std, x_mean + x_std, color="m", alpha=0.1) # 处理右侧边际图(y轴) # 添加均值横线 g.ax_marg_y.axhline(y_mean, color="m", linestyle="--", linewidth=2) # 添加±1标准差的填充区间 g.ax_marg_y.axhspan(y_mean - y_std, y_mean + y_std, color="m", alpha=0.1) plt.show()
关键步骤说明:
- 先计算
total_bill和tip的均值、标准差,确定标记位置 - 通过
g.ax_marg_x和g.ax_marg_y获取jointplot的两个边际子图对象 - 使用
axvline/axhline绘制均值标记线,用虚线和匹配的颜色保持风格统一 - 使用
axvspan/axhspan绘制标准差区间的填充区域,低透明度设计避免遮挡原直方图 - 所有元素颜色和主图保持一致(
color="m"),保证整体视觉协调
内容的提问来源于stack exchange,提问作者rbn
相关产品推荐
相关产品推荐

