当前位置:首页>python>期刊图片复现|Python绘制高颜值小提琴图+箱线图组合图

期刊图片复现|Python绘制高颜值小提琴图+箱线图组合图

  • 2026-09-02 20:21:35
期刊图片复现|Python绘制高颜值小提琴图+箱线图组合图

代码绘制成果展示

论文:Assessing context-dependent effectiveness of heat adaptation through  human mobility under different heatwave regimes
论文原图
仿图
多种配色

代码解释

第一部分

库的导入以及字体设置
# =========================================================================================# ====================================== 1. 环境设置 =======================================# =========================================================================================import matplotlib.pyplot as pltimport numpy as npfrom matplotlib.patches import Rectangleimport pandas as pdfrom scipy import statsimport matplotlib

第二部分

颜色库的设置以及配色方案的选择
# =========================================================================================# ======================================2.颜色库=======================================# =========================================================================================COLOR_SCHEMES = {    1: {'b1': '#8C8C8C', 'v1': '#D3D3D3', 'b2': '#E06666', 'v2': '#FADBD8', 'm1': '#9B59B6', 'm2': '#154360'},}SCHEME_ID = 60  #要使用的配色方案colors = COLOR_SCHEMES.get(SCHEME_ID, COLOR_SCHEMES[1])  #获取颜色

第三部分

绘图函数(数据预处理与画布设置):解析数据列名、分配颜色变量和初始化画布
# =========================================================================================# ======================================3.绘图函数======================================# =========================================================================================def draw_raincloud_plot(df):    color_grey_box = colors['b1']  #第一组箱线图颜色    color_grey_violin = colors['v1']  #第一组小提琴图颜色    color_red_box = colors['b2']  #第二组箱线图颜色    color_red_violin = colors['v2']  #第二组小提琴图颜色    color_method2 = colors['m1']  #标记颜色    color_method3 = colors['m2']  #标记颜色    #创建网格    fig, axes = plt.subplots(1,  #行                             len(keys),  #列                             figsize=(12, 5),  #画布大小                             sharey=True,  #共享y轴刻度和范围                             gridspec_kw={'wspace': 0})  #子图之间的水平宽度间距    #如果只有1个子图,将 axes 转换为列表    if len(keys) == 1: axes = [axes]

第四部分

绘图函数(循环处理、统计检验与小提琴图):进入主循环,进行 T 检验和绘制小提琴图。
    #遍历子图对象列表及其对应的索引    for i, ax in enumerate(axes):        key = keys[i]  #获取对应的特征键值        data_g = df[f"{key}_Not_heatwave"].dropna().values  # 提取数据        data_r = df[f"{key}_Under_heatwave"].dropna().values  #提取数据        #对两组独立样本数据执行 t 检验        t_stat, p_val = stats.ttest_ind(data_g,data_r,equal_var=False)        #显著性设计        if p_val < 0.001:            sig_mark = '***'        elif p_val < 0.01:            sig_mark = '**'        elif p_val < 0.05:            sig_mark = '*'        else:            sig_mark = 'ns'        #设置边框        for spine in ax.spines.values():            spine.set_linewidth(BOLD_LINE_WIDTH)        #去掉刻度线        ax.tick_params(axis='x', length=0)        #如果当前的子图不是最左边的第一个子图        if i > 0:            ax.tick_params(axis='y', length=0, left=False)  #去掉y刻度线

第五部分

绘图函数(箱线图与均值点):绘制箱线图和均值菱形点,以展示更精确的统计分布。
       #绘制箱线图        bp = ax.boxplot([data_g, data_r],  #数据                        positions=[-0.15, 0.15],  #两个箱体中心位置                        widths=0.12,  #每个箱体的宽度                        patch_artist=True,  #填充颜色                        showfliers=False,  #隐藏离群值数据点                        medianprops=dict(color='black', linewidth=BOLD_LINE_WIDTH),  #中位数横线颜色,粗细                        boxprops=dict(linewidth=BOLD_LINE_WIDTH),  #箱体边框线粗细                        whiskerprops=dict(linewidth=BOLD_LINE_WIDTH),  #上下须线粗细                        capprops=dict(linewidth=0),  #隐藏箱线图两端的水平线                        zorder=5)  #图层顺序        bp['boxes'][0].set_facecolor(color_grey_box)  #第一个箱体填充颜色        bp['boxes'][1].set_facecolor(color_red_box)  #第二个箱体填充颜色

第六部分

绘图函数(参考线、网格与文本标注):添加辅助线、网格线、坐标轴标签以及显著性标记。
        #水平参考线        ax.axhline(0,  #y                   color='grey',  # 颜色                   linestyle='dotted',  #线型                   linewidth=3,  # 线宽                   zorder=1)        #y网格线        ax.grid(axis='y',  #y轴                color='lightgrey',  #网格线颜色                linestyle='-',  #线型                alpha=0.4,  # 透明度                zorder=0)        # 在第一组箱线图的中轴线 x=-0.15 处画一条垂直参考线        ax.axvline(-0.15,  # 在第一组箱线图的中轴线 x=-0.15 处画一条垂直参考线                   color='lightgrey',  # 颜色设为浅灰                   linestyle='-',  # 实线                   alpha=0.4,  # 透明度 0.4                   zorder=0)  

第七部分

绘图函数(全局修饰、自定义图例与保存):绘制自定义的图例、子图编号、y轴标题、x、y轴设置、添加底部文本块,绘图保存
    # y轴标题    axes[0].set_ylabel('Shapley value', fontsize=28, fontweight='bold')    axes[0].set_ylim(-0.38, 0.45)  #y轴范围    #y轴刻度线样式设置    axes[0].tick_params(axis='y',  #y 轴                        length=8,  #刻度线长度                        width=BOLD_LINE_WIDTH,  #宽度                        labelsize=20,  #文字大小                        direction='out')  #朝外    #调节子图边距    fig.subplots_adjust(bottom=0.2, right=0.82, left=0.1)    #图编号    fig.text(0.02,  #x             0.95,  #y             'g',  #编号             fontsize=28,  #字体大小             fontweight='bold',  #加粗             va='top',  #垂直             ha='left')  #水平    ax_leg = fig.add_axes([0.83,  #x                           0.35,  #y                           0.15,  #宽度                           0.25])  #高度    ax_leg.axis('off')  #隐藏所有刻度和边框    #图例所需颜色和文字对应关系的列表数据结构    legend_data = [        (color_grey_box, 'Not heatwave'),  #箱体颜色和描述文本        (color_red_box, 'Under heatwave')  #箱体颜色和描述文本    ]    y_positions = [0.85, 0.35]  #图例坐标轴内部上、下两行图例的 y 轴相对高度坐标    #遍历y轴坐标列表与图例数据列表进行绘制    for y, (color, label) in zip(y_positions, legend_data):        #图例色块        rect = Rectangle((0.5 - box_width / 2,  #x                          y - box_height / 2),  #y                         box_width,  #宽度                         box_height,  #高度                         facecolor=color,  #颜色                         edgecolor='black',  #边框色                         linewidth=BOLD_LINE_WIDTH,  #边框加粗

第八部分

执行部分
# =========================================================================================# ======================================4.执行部分======================================# =========================================================================================if __name__ == '__main__':    file_path = r'data.xlsx'  #文件路径    df_data = pd.read_excel(file_path)  #读取数据    #调用绘图函数    draw_raincloud_plot(df_data)

如何应用到你自己的数据

1.设置配色方案:

SCHEME_ID = 60  #要使用的配色方案

2.设置绘图结果的保存路径:

plt.savefig(fr'plot_{SCHEME_ID}.png', dpi=300,bbox_inches='tight')

3.设置原始数据的路径:

file_path = r'data.xlsx'  #文件路径

推荐

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

获取方式

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

最新文章

随机文章