当前位置:首页>python>期刊图片复现|Python绘制配对云雨图-样本点连线

期刊图片复现|Python绘制配对云雨图-样本点连线

  • 2026-09-09 16:40:27
期刊图片复现|Python绘制配对云雨图-样本点连线

代码绘制成果展示

论文:Informative data visualization with raincloud plots in JASP
论文原图
仿图
这张配对云雨图展示了不同组别在两个不同条件或时间点下的数据分布、集中趋势与原始观测值。图中以不同颜色清晰区分了 Versicolor 与 Virginica 数据组。最外侧的半小提琴图表征数据的概率密度,其轮廓越宽厚,代表该区间的样本分布越密集;中间的散点阵列还原了每一条真实的原始记录,直观反映出实际的样本规模与离散程度;内嵌的箱线图不仅通过箱体展示了数据的四分位距、以短横线标示中位数,还借助上下延伸的须线界定了常规数据的极值范围。此外,图中的菱形标记精确锚定了各组的均值位置,而将“Pre”与“Post”阶段散点一一相连的配对线段,则直观展示了每一个独立个体在实验前后的具体变化轨迹。
多种配色

代码解释

第一部分

库的导入以及字体设置
# =========================================================================================# ====================================== 1. 环境设置 =======================================# =========================================================================================import numpy as npimport pandas as pdimport matplotlib.pyplot as pltfrom matplotlib.patches import Patch

第二部分

设置颜色库
# =========================================================================================# ======================================2.颜色库=======================================# =========================================================================================COLOR_SCHEMES = {    1: ['#F08B94', '#C92B38', '#6E9AB7', '#165785'],}

第三部分

半小提琴图绘制函数
# =========================================================================================# ======================================3.小提琴图绘制函数=======================================# =========================================================================================def plot_half_violin(ax,  # 坐标轴                     data,  # 数据                     pos,  # 位置                     side='left',  # 方向                     color_fill='blue',  # 填充颜色                     color_edge='blue'):  # 边缘颜色    # 绘制小提琴图    v = ax.violinplot(data,  # 数据        # 设定保留左半侧        if side == 'left':            vertices[:, 0] = np.clip(vertices[:, 0], -np.inf, pos)  # 将顶点X轴坐标限制在负无穷到中心位置之间        else:            vertices[:, 0] = np.clip(vertices[:, 0], pos, np.inf)

第四部分

半小提琴图绘制函数
# =========================================================================================# ======================================4.箱线图样式设置辅助函数=======================================# =========================================================================================def style_boxplot(bp, edge_color, fill_color):  # 箱线图对象、边缘颜色和填充颜色    # 遍历箱线图须线、帽线和中位线    for element in ['whiskers', 'caps', 'medians']:        # 修改图形元素属性    # 遍历箱体    for box in bp['boxes']:        box.set(color=edge_color,  # 边缘颜色                linewidth=1.5)  # 边缘线粗细        box.set(facecolor=fill_color)  # 填充颜色

第五部分

箱线图样式设置辅助函数
# =========================================================================================# ======================================4.箱线图样式设置辅助函数=======================================# =========================================================================================def style_boxplot(bp, edge_color, fill_color):  # 箱线图对象、边缘颜色和填充颜色    # 遍历箱线图须线、帽线和中位线    for element in ['whiskers', 'caps', 'medians']:        # 修改图形元素属性        box.set(facecolor=fill_color)  # 填充颜色

第六部分

主绘图函数:数据准备与画布初始化
# =========================================================================================# ======================================5.主绘图函数=======================================# =========================================================================================def plot_raincloud_chart(df, scheme_id):    colors = COLOR_SCHEMES[scheme_id]  # 提取配色方案    color_versi_fill = colors[0]  # Versicolor填充颜色    color_versi_edge = colors[1]  # Versicolor边缘颜色    color_virgi_fill = colors[2]  # Virginica填充颜色    color_virgi_edge = colors[3]  # Virginica边缘颜色    # 配置坐标轴刻度    ax.tick_params(axis='both',  # x、y                   which='major',  # 主刻度                   length=6,  # 长                   width=1.5,  # 宽                   labelsize=12)  # 字体大小

第七部分

主绘图函数:绘制左侧图形元素
    base_pre = 1.0  # 左侧图x轴基准位置    # 调用小提琴图绘制函数    plot_half_violin(ax,                     virginica_pre,                     pos=base_pre - 0.2,                     side='left',                     color_fill=color_virgi_fill,                     color_edge=color_virgi_edge)    ax.scatter(jitter_virgi_pre,  # x               virginica_pre,  # y               facecolors=color_virgi_fill,  # 填充颜色               edgecolors=color_virgi_edge,  # 边缘颜色               linewidths=1,  # 边缘线宽               alpha=1,  # 透明度               s=25,  # 大小               zorder=2)  # 层    # Versicolor左侧数据x轴抖动坐标    jitter_versi_pre = np.random.uniform(base_pre - 0.04, base_pre, size=n_samples)    # 样式调整    style_boxplot(bp2, color_virgi_edge, color_virgi_fill)

第八部分

主绘图函数:绘制右侧图形元素
    base_post = 2.0  # 右侧图x轴基准位置    # Virginica右侧箱线图x位置    pos_box_virgi_post = base_post - 0.18    # 绘制箱线图    bp3 = ax.boxplot([virginica_post],  # 数据                     positions=[pos_box_virgi_post],  # x    # Versicolor右侧箱线图x位置    pos_box_versi_post = base_post - 0.08    # 绘制箱线图    bp4 = ax.boxplot([versicolor_post],  # 数据                     positions=[pos_box_versi_post],  # x                     widths=0.06,  # 宽                     patch_artist=True,  # 颜色填充                     showfliers=False)  # 离群值    # Virginica右侧小提琴图    plot_half_violin(ax, virginica_post, pos=base_post + 0.2, side='right', color_fill=color_virgi_fill,                     color_edge=color_virgi_edge)    # Versicolor右侧小提琴图    plot_half_violin(ax, versicolor_post, pos=base_post + 0.2, side='right', color_fill=color_versi_fill,                     color_edge=color_versi_edge)

第九部分

主绘图函数:绘制配对连线与组别均值点
    # Versicolor数据均值    mean_versi_pre, mean_versi_post = np.mean(versicolor_pre), np.mean(versicolor_post)    # Virginica数据均值    mean_virgi_pre, mean_virgi_post = np.mean(virginica_pre), np.mean(virginica_post)    #绘制Virginica均值点    ax.plot([pos_box_virgi_pre, pos_box_virgi_post],  #x            [mean_virgi_pre, mean_virgi_post],  #y            color=color_virgi_edge,  #颜色            marker='D',  #均值点形状            linestyle='none',  #连线            markersize=6,  #点大小            zorder=3)  #层级

第十部分

主绘图函数:坐标轴和边框设置
# X轴刻度线位置    ax.set_xticks([(base_pre + 0.04), (base_post - 0.04)])    # X轴刻度标注    ax.set_xticklabels(['Pre', 'Post'],  # 文本                       fontsize=12,  # 字体大小                       fontweight='bold')  # 加粗    ax.spines['bottom'].set_bounds((base_pre + 0.04), (base_post - 0.04))  # 范围    ax.spines['left'].set_bounds(2.0, 4.5)

第十一部分

主绘图函数:图例绘制以及绘图结果保存
# 实例化图例    legend_elements = [        Patch(facecolor=color_versi_fill,  # 图例色块              edgecolor='none',  # 边框    # 绘制图例              bbox_to_anchor=(1.15, 1.05),  # 坐标              frameon=False,  # 边框              title_fontsize=12,  # 标题大小              fontsize=11)  # 文本大小

第十二部分

执行部分
# =========================================================================================# ======================================2.颜色库=======================================# =========================================================================================if __name__ == '__main__':    excel_filename = r"data.xlsx"  # 原始数据    df_real = pd.read_excel(excel_filename)  # 读取        selected_hex_colors = COLOR_SCHEMES[scheme_id]        print(f'正在绘制并保存方案:{scheme_id}')        plot_raincloud_chart(df_real, scheme_id)

如何应用到你自己的数据

1.设置原始数据的保存路径,执行部分:

excel_filename = r"data.xlsx" 
2.设置是否进行批量绘图,执行部分:
plot_all = True
3.设置要读取的数据列名,执行部分:
versicolor_pre = df['Versicolor_Pre'].dropna().valuesversicolor_post = df['Versicolor_Post'].dropna().valuesvirginica_pre = df['Virginica_Pre'].dropna().valuesvirginica_post = df['Virginica_Post'].dropna().values
4.设置绘图结果的保存地址,执行部分:
plt.savefig(fr"plot_scheme_{scheme_id}.png", bbox_inches='tight',            dpi=300)

推荐

期刊图片复现|Python绘制二维偏依赖PDP图
期刊复现|python绘制基于SHAP分析和GAM模型拟合的单特征依赖图
期刊图片复现|python绘制带有渐变颜色shap特征重要性组合图(条形图+蜂巢图)
期刊复现|用Python绘制SHAP特征重要性总览图、依赖图、双特征交互效应SHAP图,解锁XGBoost模型的终极奥秘
期刊图片复现|Python绘制shap重要性蜂巢图+单特征依赖图+交互效应强度气泡图+交互效应依赖图(回归+二分类+分类)

获取方式

公众号中的所有所有的免费代码都已经下架了,都并入到付费部分里了,付费合集代码和数据的购买通道已经开通,全部合集100元,后续将会持续更新,决定购买请后台私信我,注意只会分享练习数据和代码文件,不会提供答疑服务,代码文件中已经包含了每行代码的完整注释,购买前请确保真的需要!!!

最新文章

随机文章