# 6. 开始遍历8个子图进行绘制 print("\n=== 开始绘制雷达图 ===") for i, ax in enumerate(axes.flat): # 处理数据不足8组的情况,关闭多余子图 if i >= len(df): print(f"子图 {i + 1} 无数据,已禁用") ax.axis('off') continue # 获取当前组的数据并计算闭合的角度和数值 group_name = df.index[i] values = df.iloc[i].values num_vars = len(values) angles = np.linspace(0, 2 * np.pi, num_vars, endpoint=False) closed_angles = np.concatenate((angles, [angles[0]])) closed_values = np.concatenate((values, [values[0]])) # 获取对应颜色并绘制填充区域与边界线 color = COLOR_MAP[group_name] ax.fill(angles, values, color=color, alpha=0.25) ax.plot(closed_angles, closed_values, color=color, linewidth=2) # 设置极坐标参数:0度在顶部,顺时针排列 ax.set_theta_offset(np.pi / 2) ax.set_theta_direction(-1) # 设置变量名称标签(X轴)和半径刻度标签(Y轴) ax.set_xticks(angles) ax.set_xticklabels(df.columns, fontsize=14, color='#333333') ax.set_rlabel_position(30) ax.set_yticks([10, 20, 30]) plt.ylim(0, 40) ax.tick_params(axis='y', labelsize=12, colors='grey') # 设置极坐标边框样式(浅灰色) ax.spines['polar'].set_visible(True) ax.spines['polar'].set_color('#c1c1c1') ax.spines['polar'].set_linewidth(1) # 根据行数动态调整标题间距,并设置标题 title = f"组别 {group_name}" if cn_font else f"Group {group_name}" title_pad = 20 if i < 4 else 30 if cn_font: ax.set_title(title, fontproperties=cn_font, pad=title_pad, color=color, fontsize=16) else: ax.set_title(title, pad=title_pad) print(f"已绘制 {title}")