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()