COLOR_SCHEMES = { 1: ['#5B9BD5', '#ED7D31'], # 经典蓝橙 (原图复现) 2: ['#3B528B', '#5DC870'], # Viridis 科技绿调 3: ['#00A087', '#3C5488'], # Lancet 风格 (青绿与深蓝) 4: ['#4DBBD5', '#E64B35'], # Nature 风格 (明朗红蓝) 5: ['#00468B', '#ED0000'], # Science 风格 (高对比深蓝红) 6: ['#1A365D', '#D69E2E'], # 经典商务蓝金 7: ['#008080', '#FF6347'], # 现代青色与番茄红 8: ['#4A5568', '#CBD5E0'], # 工业高级黑灰阶 9: ['#704214', '#F5F5DC'], # 地球大地色系 10: ['#2C3E50', '#E74C3C'], # Flat UI 优雅深灰红 11: ['#3F51B5', '#FF4081'], # Material Design 靛蓝粉红 12: ['#1ABC9C', '#2ECC71'], # 薄荷绿与翡翠绿 (清新风格) 13: ['#673AB7', '#FF9800'], # 神秘深紫与生动橙 14: ['#34495E', '#BDC3C7'], # 银灰与深海蓝 (冷调学术) 15: ['#8E44AD', '#3498DB'], # 罗兰紫与天空蓝 16: ['#27AE60', '#F1C40F'], # 邮政绿与向日葵黄 17: ['#D35400', '#2980B9'], # 南瓜橙与冷艳蓝 (高反差) 18: ['#16A085', '#E67E22'], # 青松绿与落叶橙 19: ['#7F8C8D', '#95A5A6'], # 双重中性灰阶 20: ['#000080', '#800000'] # 传统海军蓝与深红}
import osimport pandas as pdimport matplotlib.pyplot as pltSELECTED_SCHEME = 1COLOR_SCHEMES = { 1: ['#5B9BD5', '#ED7D31'], # 经典蓝橙 (原图复现) 2: ['#3B528B', '#5DC870'], # Viridis 科技绿调 3: ['#00A087', '#3C5488'], # Lancet 风格 (青绿与深蓝) 4: ['#4DBBD5', '#E64B35'], # Nature 风格 (明朗红蓝) 5: ['#00468B', '#ED0000'], # Science 风格 (高对比深蓝红) 6: ['#1A365D', '#D69E2E'], # 经典商务蓝金 7: ['#008080', '#FF6347'], # 现代青色与番茄红 8: ['#4A5568', '#CBD5E0'], # 工业高级黑灰阶 9: ['#704214', '#F5F5DC'], # 地球大地色系 10: ['#2C3E50', '#E74C3C'], # Flat UI 优雅深灰红 11: ['#3F51B5', '#FF4081'], # Material Design 靛蓝粉红 12: ['#1ABC9C', '#2ECC71'], # 薄荷绿与翡翠绿 (清新风格) 13: ['#673AB7', '#FF9800'], # 神秘深紫与生动橙 14: ['#34495E', '#BDC3C7'], # 银灰与深海蓝 (冷调学术) 15: ['#8E44AD', '#3498DB'], # 罗兰紫与天空蓝 16: ['#27AE60', '#F1C40F'], # 邮政绿与向日葵黄 17: ['#D35400', '#2980B9'], # 南瓜橙与冷艳蓝 (高反差) 18: ['#16A085', '#E67E22'], # 青松绿与落叶橙 19: ['#7F8C8D', '#95A5A6'], # 双重中性灰阶 20: ['#000080', '#800000'] # 传统海军蓝与深红}selected_colors = COLOR_SCHEMES.get(SELECTED_SCHEME, COLOR_SCHEMES[1])color_amb = selected_colors[0]color_warm = selected_colors[1]output_dir = "图表"os.makedirs(output_dir, exist_ok=True)excel_file = "data.xlsx"if not os.path.exists(excel_file): raise FileNotFoundError(f"未在当前目录下找到 {excel_file} 文件。")df_main = pd.read_excel(excel_file, sheet_name="Main Histogram Data")df_sub = pd.read_excel(excel_file, sheet_name="Subplot Data")bin_centers = df_main["Bin Center (°C)"].valuesamb_counts = df_main["Ambient Count (Left Axis)"].valueswarm_counts_scaled = df_main["Warmed Count (Right Axis)"].valuesbin_width = 0.5sub_amb_df = df_sub[["Amb Subplot Bin Center (°C)", "Amb Subplot Count"]].dropna()sub_heated_df = df_sub[["Heated Subplot Bin Center (°C)", "Heated Subplot Count"]].dropna()fig, ax1 = plt.subplots(figsize=(10, 4.5), dpi=300)bars1 = ax1.bar(bin_centers, amb_counts, width=bin_width, color=color_amb, edgecolor='black', linewidth=0.4, alpha=0.8, label='ambient')ax1.set_xlabel('Temp (°C)', fontsize=12)ax1.set_ylabel('count', color=color_amb, fontsize=12)ax1.tick_params(axis='y', colors=color_amb)ax1.spines['left'].set_color(color_amb)ax1.set_xlim(20, 45)ax1.set_ylim(0, 2500)ax2 = ax1.twinx()bars2 = ax2.bar(bin_centers, warm_counts_scaled, width=bin_width, color=color_warm, edgecolor='black', linewidth=0.4, alpha=0.5, label='warmed')ax2.set_ylabel('count', color=color_warm, fontsize=12)ax2.tick_params(axis='y', colors=color_warm)ax2.spines['right'].set_color(color_warm)ax2.spines['left'].set_color(color_amb)ax2.set_ylim(0, 10000)plt.title('Brazil km83 + 2°C warming', fontsize=13, fontweight='bold', pad=10)lines = [bars1, bars2]labels = [b.get_label() for b in lines]ax1.legend(lines, labels, loc='lower right', bbox_to_anchor=(0.9, 0.25), frameon=True, facecolor='white', edgecolor='grey')ax_ins1 = fig.add_axes([0.58, 0.58, 0.12, 0.24])ax_ins1.bar(sub_amb_df["Amb Subplot Bin Center (°C)"], sub_amb_df["Amb Subplot Count"], width=0.5, color=color_amb, edgecolor='black', linewidth=0.4)ax_ins1.set_title('Amb 42.8°C', fontsize=10, pad=2)ax_ins1.set_xlabel('Temp (°C)', fontsize=8, labelpad=2)ax_ins1.set_ylabel('count', fontsize=8, labelpad=2)ax_ins1.set_xlim(37, 42)ax_ins1.set_ylim(0, 50)ax_ins1.tick_params(axis='both', labelsize=8)ax_ins2 = fig.add_axes([0.76, 0.58, 0.12, 0.24])ax_ins2.bar(sub_heated_df["Heated Subplot Bin Center (°C)"], sub_heated_df["Heated Subplot Count"], width=0.5, color=color_amb, edgecolor='black', linewidth=0.4)ax_ins2.set_title('Heated 50.9°C', fontsize=10, pad=2)ax_ins2.set_xlabel('Temp (°C)', fontsize=8, labelpad=2)ax_ins2.set_ylabel('count', fontsize=8, labelpad=2)ax_ins2.set_xlim(42, 46)ax_ins2.set_ylim(0, 200)ax_ins2.tick_params(axis='both', labelsize=8)output_image_path = os.path.join(output_dir, "brazil_warming_plot.png")plt.savefig(output_image_path, bbox_inches='tight')plt.close()print(f"Plot successfully saved to: {output_image_path}")