
代码绘制成果展示











代码解释


第一部分

# =========================================================================================# ====================================== 1. 环境设置 =======================================# =========================================================================================import matplotlib.pyplot as pltimport numpy as npfrom scipy.interpolate import make_interp_splineimport matplotlib

第二部分

# =========================================================================================# ======================================2.颜色库=======================================# =========================================================================================COLOR_SCHEMES = {1: ['#77b5fe', '#C79FEF', '#77dd77'],}

第三部分

# =========================================================================================# ======================================3.绘图函数=======================================# =========================================================================================def plot_advanced_forest_chart(df, scheme_id):num_provinces = len(labels) #标签数start_angle_offset = np.pi / 2 + 2 * (2 * np.pi / num_provinces) #起始偏角angles = np.linspace(start_angle_offset, 2 * np.pi + start_angle_offset, num_provinces, endpoint=False) # 生成等距角度r_outer = 1.0 # 外圈半径r_inner = 0.3 # 内圈半径num_concentric_circles = 4 # 同心圆数量radii = np.linspace(r_inner, r_outer, num_concentric_circles) # 生成半径数组x, y = label_radius * np.cos(angle), label_radius * np.sin(angle) # 标签坐标angle_deg = np.rad2deg(angle) % 360 # 弧度转角度# 设置文本旋转角度if 90 < angle_deg < 270:ha = 'right'elif angle_deg == 90 or angle_deg == 270:ha = 'center'else:ha = 'left'#添加标签文本ax.text(x, # xy, # ylabel, # 文本horizontalalignment=ha, # 水平verticalalignment='center', # 垂直fontsize=10) # 字号

第四部分

bubble_radius_2000, bubble_radius_2010, bubble_radius_2020 = 0.5, 0.7, 0.9 #气泡半径MIN_BUBBLE_SIZE, MAX_BUBBLE_SIZE = 100.0, 300.0 # 气泡缩放极值x_2010, y_2010 = bubble_radius_2010 * np.cos(angles), bubble_radius_2010 * np.sin(angles) #2010散点坐标# 绘制气泡ax.scatter(x_2010, #xy_2010, #ys=sizes_2010, # 大小c=color_2010, # 颜色alpha=0.6, # 透明度zorder=10) # 层x_2020, y_2020 = bubble_radius_2020 * np.cos(angles), bubble_radius_2020 * np.sin(angles) #2020散点坐标# 绘制气泡ax.scatter(x_2020, #xy_2020, #ys=sizes_2020, # 大小c=color_2020, # 颜色alpha=0.6, # 透明度zorder=10) # 层

第五部分

ax.fill(smooth_x, # xsmooth_y, # ycolor=color, # 颜色alpha=0.5, # 透明度zorder=5) # 层#绘制边ax.plot(smooth_x, # xsmooth_y, # ycolor=color, # 颜色linewidth=linewidth, # 线宽zorder=9) # 层ax.set_xlim(-1.3, 1.3) # X范围ax.set_ylim(-1.3, 1.3) # Y范围ax.set_aspect('equal', adjustable='box') # 固定等距缩放ax.axis('off') # 隐藏坐标轴#创建中心白色圆white_circle = plt.Circle((0, 0), # 原点r_inner, # 半径color='white', # 白色zorder=15) # 层ax.add_artist(white_circle) # 添加ax.add_artist(inner_border_rerender) # 添加到图上

第六部分

scale_angle = np.pi / 2 # 设置刻度条夹角为正上方ax.plot([axis_x_start, axis_x_end], #x[axis_y_start, axis_y_end], # ycolor='black', # 黑色linewidth=1.5, # 线宽zorder=11) # 层ax.add_artist(leg1) # 添加#颜色图例# 句柄year_handles = [Patch(facecolor=color_2020, alpha=0.7, label='2020'),Patch(facecolor=color_2010, alpha=0.7, label='2010'),Patch(facecolor=color_2000, alpha=0.7, label='2000')]#添加图例leg2 = ax.legend(handles=year_handles, # 句柄title="Year", # 标题loc='upper left', # 位置bbox_to_anchor=(0.95, 0.5), # 坐标frameon=False, # 边框labelspacing=1.0) # 行距ax.add_artist(leg2) # 添加

第七部分

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

如何应用到你自己的数据

1.设置原始数据的保存路径,执行部分:
file_path = r'data.xlsx'2.读取雷达气泡图表数据,执行部分:
df_area = pd.read_excel(file_path, sheet_name='Sheet1')df_yield = pd.read_excel(file_path, sheet_name='Sheet2')
3.设置是否进行批量绘图,执行部分:
plot_all = True4.读取绘图数据,雷达气泡图绘图函数部分:
labels = df_yield['Province'].values # 获取标签5.设置绘图结果的最终保存地址,雷达气泡图绘图函数部分:
plt.savefig(fr'雷达气泡图{scheme_id}.png', dpi=300, bbox_inches='tight', bbox_extra_artists=[leg1, leg2])
往期内容


注意
