
代码绘制成果展示












代码解释


第一部分

# =========================================================================================# ====================================== 1. 环境设置 =======================================# =========================================================================================import numpy as npimport pandas as pdimport matplotlib.pyplot as plt

第二部分

# =========================================================================================# ======================================2.颜色库=======================================# =========================================================================================COLOR_SCHEMES = {1: ['#9b82ba', '#35a7d9', '#f09662'],}

第三部分

# =========================================================================================# ======================================3.绘图函数=======================================# =========================================================================================def plot_advanced_forest_chart(df, scheme_id):theta_min_deg = 0 # 最小角度theta_max_deg = 180 # 最大角度theta_min_rad = np.deg2rad(theta_min_deg) # 转弧度theta_max_rad = np.deg2rad(theta_max_deg) # 转弧度margin = (theta_max_rad - theta_min_rad) / (num_violins + 1) # 计算边距angles = np.linspace(theta_max_rad - margin, theta_min_rad + margin, num_violins) # 生成角度angle_map = {tuple(x): ang for x, ang in zip(unique_pairs.values, angles)} # 映射角度c_total, c_day, c_night = COLOR_SCHEMES[scheme_id] # 获取颜色color_map = {'Total': c_total, 'Day': c_day, 'Night': c_night} # 映射颜色

第四部分

#创建画布fig = plt.figure(figsize=(12, 7))ax = fig.add_subplot(111, polar=True) # 添加极坐标子图ax.set_thetamin(theta_min_deg) # 最小角ax.set_thetamax(theta_max_deg) # 最大角ax.set_rorigin(r_origin) # 原点ax.set_ylim(0, y_limit) # 范围ax.set_xticks(unique_angles) # X轴刻度ax.set_xticklabels([]) # 清空X轴标签ax.tick_params(axis='x', length=0) # 去掉刻度线ax.set_yticks(y_ticks) # 设置y轴刻度ax.set_yticklabels([]) # 清空y轴标签#网格线设置ax.grid(True, # 开启color='#ebebeb', # 颜色linestyle='-', # 线型linewidth=1.2, # 线宽zorder=0) # 层ax.spines['polar'].set_visible(False) # 去掉径向线

第五部分

theta_arc = np.linspace(theta_min_rad, theta_max_rad, 200) # 生成圆弧点# 右侧x边框ax.plot([theta_min_rad, theta_min_rad], # 角度[0, y_limit], # 半径color='black', # 颜色lw=frame_lw, # 线宽clip_on=False) # 裁剪ax.text(theta_text, # 角度r_text_data, # 半径str(r), # 文本ha='center', # 水平va='top', # 垂直fontsize=12, # 字号fontweight='bold', # 加粗color='black', # 颜色clip_on=False) # 裁剪ax.text(theta_text_label, # 角度r_text_label_data, # 半径"Precipitation(mm)", # 文本ha='center', # 水平va='top', # 垂直fontsize=13, # 字号fontweight='bold', # 加粗color='black', # 颜色clip_on=False) # 裁剪

第六部分

# 创建图例legend_elements = []#添加图例ax.legend(handles=legend_elements, # 句柄loc='lower center', # 位置bbox_to_anchor=(0.5, 0.1), # 坐标ncol=3, # 列数frameon=False, # 边框handlelength=1.5, # 长handleheight=1.2, # 高columnspacing=2, # 列距prop={'weight': 'bold', # 加粗'size': 13, # 字号})

第七部分

# =========================================================================================# ======================================4.执行部分=======================================# =========================================================================================if __name__ == '__main__':excel_filename = r"data.xlsx"df_real = pd.read_excel(excel_filename) #读取数据scheme_id = 1selected_hex_colors = COLOR_SCHEMES[scheme_id]print('正在绘制并保存方案:', scheme_id)plot_advanced_forest_chart(df_real, scheme_id)

如何应用到你自己的数据

1.设置原始数据的保存路径,执行部分:
excel = r"data.xlsx"2.设置是否要进行批量绘图,执行部分:
plot_all = True3.设置要使用的数据,绘图函数部分:
df['Mean'] = df.groupby(['Region', 'Category'])['Value'].transform('mean').round(1) # 计算均值unique_pairs = df[['Region', 'Category']].drop_duplicates() #提取唯一组合
4.设置绘图结果的保存地址,绘图函数部分:
plt.savefig(fr"\scheme_{scheme_id}.png", dpi=300, bbox_inches='tight')
往期内容


获取方式
