当前位置:首页>python>期刊图片复现|Python绘制环形堆叠图+折线图组合图

期刊图片复现|Python绘制环形堆叠图+折线图组合图

  • 2026-10-11 08:34:15
期刊图片复现|Python绘制环形堆叠图+折线图组合图

代码绘制成果展示

论文:Sensory profile and the contribution of key aroma compounds in Jiang-flavor rounded-base Baijiu produced in the Chishui river basin 
论文原图
主图部分七层同心圆环由内向外分别对应七个阶段,每层环中的彩色色块代表了不同类别的元素,其弧度长度反映了该组分在样本中的相对比例;末端标注的斜体数值代表了每一轮样本的总量。右上角的嵌套折线图,重点对三种关键组分的绝对含量进行了趋势提取,清晰地展示了随着轮次的递增的变化趋势。
仿图
多种配色

代码解释

第一部分

库的导入以及字体设置
# =========================================================================================# ====================================== 1. 环境设置 =======================================# =========================================================================================import numpy as npimport matplotlib.pyplot as pltimport pandas as pdfrom matplotlib.patches import Patchimport matplotlibmatplotlib.rcParams['pdf.fonttype'] = 42matplotlib.rcParams['ps.fonttype'] = 42plt.rcParams['font.family'] = 'Times New Roman'plt.rcParams['font.weight'] = 'bold'plt.rcParams['axes.labelweight'] = 'bold'plt.rcParams['axes.titleweight'] = 'bold'

第二部分

颜色库
# =========================================================================================# ======================================2.颜色库=======================================# =========================================================================================COLOR_SCHEMES = {1: ['#003366', '#0066AA', '#6699CC', '#AACCFF', '#E0F0F0', '#FFE5D0', '#FFB080', '#EE6644', '#AA0022'],}

第三部分

绘图函数:提取配色,不同部分数据,处理折线图数据,创建画布,极坐标设置,定义绘图开始位置,绘图方向
def plot_flavor_profile(data_dict,scheme_id = 1):    colors = COLOR_SCHEMES.get(scheme_id, COLOR_SCHEMES[1])  #提取配色方案    line_data = {        'esters': proportions[:, 0] * concentrations * 1000,  #转换单位        'alcohols': proportions[:, 1] * concentrations * 1000,        'furans': proportions[:, 5] * concentrations * 1000    }    #创建画布    fig = plt.figure(figsize=(14, 10), dpi=100)    ax = fig.add_subplot(111, polar=True)  #添加一个极坐标子图    ax.set_theta_offset(np.pi / 2)  #起始位置正上方    ax.set_theta_direction(1)  #设置角度的增长方向为逆时针

第四部分

绘图函数:开始绘制环形堆叠柱状图,循环绘制每一个圆环,标注数值标记
    ring_height = 0.75  #每一个环的宽度    inner_radius = 1  #最内侧环与圆心的距离    scale_factor = (2 * np.pi * 0.75) / max(concentrations)  #缩放因子,使最大占比占据圆周的四分之三    #遍历所有层        #起始处层标注        ax.text(-0.05,  #角度                bottom + ring_height / 2,  #半径                rounds_labels[i],  #文本                ha='left',  #水平                va='center',  #垂直                fontsize=14,  #字体大小                weight='bold',  #加粗                color='black')  #颜色        #层尾处数值标注        ax.text(current_theta + 0.05,  #角度                bottom + ring_height / 2,  #半径                f"{total_conc:.2f}",  #文本                ha='left',  #水平                va='center',  #垂直                fontsize=11,  #字体大小                fontstyle='italic',  #斜体                fontweight='bold')  #加粗

第五部分

绘图函数:绘制指引的红色箭头以及添加折线图坐标轴
    ax.set_axis_off()  #关闭极坐标自带的坐标轴、网格和刻度    arrow_angle = -np.pi / 4  #红色箭头的指向角度    #插入折线图轴    ax_ins = fig.add_axes([0.54,#左                           0.62,#下                           0.25,#宽                           0.29])#高    ax_ins.set_facecolor('none')  #子图背景色

第六部分

绘图函数:绘制嵌套折线图
    #遍历边框线设置粗细    for spine in ax_ins.spines.values():        spine.set_linewidth(2.5)    x_idx = np.arange(len(rounds_labels))  #生成折线图x轴基准点        #绘制折线        ax_ins.errorbar(x_idx,  #x                        y_val,  #y                        fmt='s-',  #使用方形                        color=line_colors[i],  #颜色                        label=line_labels[i],  #图例标签名称                        markersize=5,  #形点的大小                        lw=2)  #线宽

第七部分

执行部分
# =========================================================================================# ======================================4.执行部分=======================================# =========================================================================================if __name__ == "__main__":    file_path = r"data.xlsx"  #原始数据路径    df_shared = pd.read_excel(file_path, sheet_name="Shared_Flavor_Data")  #读取数据    r_labels = df_shared['Round'].astype(str).tolist()  #层标签数据    conc = df_shared['Total_Conc'].to_numpy()  #层尾数值标注数据    cats = df_shared.columns[2:].tolist()  #提取列名数据,就是颜色的数据    print(cats)    prop_data = df_shared.iloc[:, 2:].to_numpy()  #提取每一层内部的数值数据    #打包    data_payload = {        'rounds_labels': r_labels,        'concentrations': conc,        'categories': cats,        'proportions': prop_data    }    #用于决定是批量生成所有配色的图表,还是只生成单张特定配色的图表    plot_all = True    #批量绘图    if plot_all:        #遍历        for i in range(1, 61):            if i in COLOR_SCHEMES:                #调用绘图函数                plot_flavor_profile(data_payload,scheme_id = i)    #绘制单图    else:        #要使用的配色方案        target_scheme = 22        #调用绘图函数        plot_flavor_profile(data_payload,scheme_id = target_scheme)

如何应用到你自己的数据

1.设置是一次绘制一张图还是一次性绘制出所有配色的图,执行部分:

plot_all = True

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

file_path = r"data.xlsx"  #原始数据路径

3.提取每一个部分的数据,执行部分:

r_labels = df_shared['Round'].astype(str).tolist()  #层标签数据conc = df_shared['Total_Conc'].to_numpy()  #层尾数值标注数据cats = df_shared.columns[2:].tolist()  #提取列名数据,就是颜色的数据prop_data = df_shared.iloc[:, 2:].to_numpy()  #提取每一层内部的数值数据

4.折线图数据预处理,绘图函数:

line_data = {    'esters': proportions[:, 0] * concentrations * 1000,  #转换单位    'alcohols': proportions[:, 1] * concentrations * 1000,    'furans': proportions[:, 5] * concentrations * 1000}

5.设置绘图结果的保存地址,绘图函数:

plt.savefig(fr"\result{scheme_id}.png", dpi=300,bbox_inches='tight')

推荐

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

获取方式

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

最新文章

随机文章