当前位置:首页>python>Nature期刊图复现 | Python实现高颜值2.5D多通道堆叠色谱图

Nature期刊图复现 | Python实现高颜值2.5D多通道堆叠色谱图

  • 2026-10-11 05:47:53
Nature期刊图复现 | Python实现高颜值2.5D多通道堆叠色谱图

来源论文

论文地址:

https://www.nature.com/articles/s41586-023-06533-3

论文题目:

Molecular basis of methyl-salicylate-mediated plant airborne defence

复现图片

图 1 错位堆叠色谱图:该图展示了不同处理下水杨酸甲酯(MeSA,m/z 120)的提取离子色谱峰形。横坐标为保留时间(Retention time),纵坐标为信号强度(Intensity)。图中黑色斜线与灰色点线为立体视轨辅助线,用于实现双通道色谱图的错位堆叠视觉效果。不同颜色的曲线分别代表不同的实验处理组,其中蓝色曲线代表蚜虫侵害组(Aphid infestation),橙色曲线代表水杨酸甲酯处理组(MeSA treatment)。正式图注:图 1 不同处理下水杨酸甲酯(MeSA)的错位堆叠提取离子色谱图。

配色方案

COLOR_SCHEMES = {    1: {'aphid': '#5ca2c8', 'mesa': '#d47144'},  # 经典蓝橙    2: {'aphid': '#2ca02c', 'mesa': '#8c564b'},  # 植物绿棕    3: {'aphid': '#008080', 'mesa': '#4169e1'},  # 青绿与皇家蓝    4: {'aphid': '#1f78b4', 'mesa': '#e31a1c'},  # 强对比红蓝    5: {'aphid': '#8dd3c7', 'mesa': '#bebada'},  # 柔和粉彩    6: {'aphid': '#7570b3', 'mesa': '#d95f02'},  # 现代紫橙    7: {'aphid': '#1f77b4', 'mesa': '#aec7e8'},  # 深浅海洋蓝    8: {'aphid': '#b2182b', 'mesa': '#e08214'},  # 秋季红金    9: {'aphid': '#4d4d4d', 'mesa': '#999999'},  # 印刷黑灰    10: {'aphid': '#c51b7d', 'mesa': '#4d9221'}  # 莓红与橄榄绿}

完整代码

import osimport pandas as pdimport matplotlib.pyplot as pltimport matplotlib.ticker as ticker# 定义10种科学出版及常用配色方案COLOR_SCHEMES = {    1: {'aphid': '#5ca2c8', 'mesa': '#d47144'},  # 经典蓝橙    2: {'aphid': '#2ca02c', 'mesa': '#8c564b'},  # 植物绿棕    3: {'aphid': '#008080', 'mesa': '#4169e1'},  # 青绿与皇家蓝    4: {'aphid': '#1f78b4', 'mesa': '#e31a1c'},  # 强对比红蓝    5: {'aphid': '#8dd3c7', 'mesa': '#bebada'},  # 柔和粉彩    6: {'aphid': '#7570b3', 'mesa': '#d95f02'},  # 现代紫橙    7: {'aphid': '#1f77b4', 'mesa': '#aec7e8'},  # 深浅海洋蓝    8: {'aphid': '#b2182b', 'mesa': '#e08214'},  # 秋季红金    9: {'aphid': '#4d4d4d', 'mesa': '#999999'},  # 印刷黑灰    10: {'aphid': '#c51b7d', 'mesa': '#4d9221'}  # 莓红与橄榄绿}# 当前选择的配色方案SELECTED_SCHEME = 1def create_chart():    # 确保图表保存目录存在    output_dir = "图表"    if not os.path.exists(output_dir):        os.makedirs(output_dir)    # 读取 Excel 数据    file_path = 'data.xlsx'    if not os.path.exists(file_path):        print(f"错误: 找不到文件 {file_path}")        return    df = pd.read_excel(file_path)    x = df['Retention time (min)']    y_aphid = df['Aphid infestation']    y_mesa = df['MeSA treatment']    # 设置画布大小    fig, ax = plt.subplots(figsize=(6.5, 3.5))    # 获取选定的配色方案    colors = COLOR_SCHEMES.get(SELECTED_SCHEME, COLOR_SCHEMES[1])    color_aphid = colors['aphid']    color_mesa = colors['mesa']    # 绘制两条主曲线    ax.plot(x, y_aphid, color=color_aphid, linewidth=1.2, zorder=3)    ax.plot(x, y_mesa, color=color_mesa, linewidth=1.2, zorder=3)    # 绘制黑色斜线和灰色点线    ax.plot([5.5, 6.55], [0, 3.7], color='black', linewidth=1, zorder=2)    ax.plot([7.05, 8.0], [0, 3.8], color='#a0a0a0', linestyle=':', linewidth=1, zorder=2)    # 添加左上角文本标识    ax.text(5.25, 8.0, 'i', fontweight='bold', fontsize=12, va='center')    ax.text(5.6, 8.0, 'MeSA', fontsize=10, va='center')    ax.text(5.6, 7.3, r'$m/z$ 120', fontsize=10, va='center', style='italic')    # 添加曲线文本标签,防止与波峰曲线交叉    ax.text(8.15, 2.65, 'MeSA treatment', color=color_mesa, fontsize=10, va='bottom', ha='left')    ax.text(7.95, 1.25, 'Aphid infestation', color=color_aphid, fontsize=10, va='bottom', ha='left')    # 设置坐标轴范围与标签    ax.set_xlim(5.5, 8.8)    ax.set_ylim(0, 8.5)    ax.set_xlabel('Retention time (min)', fontsize=11)    ax.set_ylabel(r'Intensity ($\times 10^3$)', fontsize=11)    # 设置刻度朝向内部    ax.tick_params(axis='both', direction='in', which='major', length=4, width=1)    ax.tick_params(axis='y', direction='in', which='minor', length=2.5, width=0.8)    # 设置主要和次要刻度    ax.set_xticks([5.5, 6.0, 6.5, 7.0, 7.5, 8.0, 8.5])    ax.yaxis.set_minor_locator(ticker.AutoMinorLocator(2))    # 隐藏上方和右方的边框线    ax.spines['top'].set_visible(False)    ax.spines['right'].set_visible(False)    ax.spines['left'].set_linewidth(1)    ax.spines['bottom'].set_linewidth(1)    # 调整布局并保存图片    plt.tight_layout()    output_file = os.path.join(output_dir, 'chromatogram.png')    plt.savefig(output_file, dpi=300, bbox_inches='tight')    plt.close()    print(f"图表已生成并保存至: {output_file}")if __name__ == "__main__":    create_chart()

数据获取

评论+私信获取

最新文章

随机文章