
代码绘制成果展示













代码解释


第一部分

# =========================================================================================# ====================================== 1. 环境设置 =======================================# =========================================================================================import matplotlib.pyplot as pltfrom matplotlib.patches import Wedge, Rectangle, Patchimport numpy as npimport pandas as pdimport os

第二部分

# =========================================================================================# ======================================2.颜色库=======================================# =========================================================================================COLOR_SCHEMES = {1: ['#ECA8C4', '#314481', '#E9A390', '#9E97C2', '#9BB5D5', '#F8D0C3', '#B4AED5'],}

第三部分

# =========================================================================================# ======================================4.主绘图函数=======================================# =========================================================================================def plot_advanced_forest_chart(df_real, scheme_id):ax.set_aspect('equal') # 强制x和y轴的比例一致ax.axis('off') # 去掉坐标轴的刻度和边框显示ax.set_xlim(-1.2, 1.2) # x轴的范围ax.set_ylim(-0.3, 1.4) # y轴的范围arc_width = 0.16 # 弧状条形的宽度gap = 0.02 # 图形之间的间距

第四部分

r1_out = 1.05 # 最外侧弧形的外半径wedge_blue = Wedge(center=(0, 0), # 中心点r=r2_out, # 外半径theta1=theta_blue_start, # 起始角度theta2=180, # 结束角度width=arc_width, # 圆环宽度facecolor=c_arc_blue, # 填充色edgecolor='none') # 边框线# 绘制弧形wedge_purple = Wedge(center=(0, 0), # 中心点r=r4_out, # 外半径theta1=theta_purple_start, # 起始角度theta2=180, # 结束角度width=arc_width, # 圆环宽度facecolor=c_arc_purple, # 填充色edgecolor='none') # 边框线ax.add_patch(wedge_purple) # 添加到坐标轴上

第五部分

bar_y = -0.22 # 水平堆叠条形图的y坐标起点#创建第一部分条形rect_lb = Rectangle((x1, bar_y), #坐标w_1, # 宽bar_height, # 高facecolor=c_bar_lb, # 填充色edgecolor='none') # 边框ax.add_patch(rect_lb) # 添加到图上# 创建第二部分条形rect_pe = Rectangle((x2, bar_y), #坐标w_2, # 宽bar_height, # 高facecolor=c_bar_pe, # 填充色edgecolor='none') # 边框ax.add_patch(rect_pe) # 添加到图上# 创建第三部分条形rect_pu = Rectangle((x3, bar_y), #坐标w_3, # 宽bar_height, # 高facecolor=c_bar_pu, # 填充色edgecolor='none') # 边框ax.add_patch(rect_pu) # 添加到图上

第六部分

r1_mid = (r1_out + r1_in) / 2 # 第一圈弧形的中径text_y = bar_y + bar_height / 2 # 底部堆叠条形图内文本的Y轴中间坐标# 添加第一部分矩形文本ax.text(x1 + w_1 / 2, # xtext_y, # ytexts[4], # 文本ha='center', # 水平va='center', # 垂直color='white', # 颜色fontsize=16, # 字体)# 添加第二部分矩形文本ax.text(x2 + w_2 / 2, # xtext_y, # ytexts[5], # 文本ha='center', # 水平va='center', # 垂直color='#333333', # 颜色fontsize=16, # 字体)# 添加第三部分矩形文本ax.text(x3 + w_3 / 2, # xtext_y, # ytexts[6], # 文本ha='center', # 水平va='center', # 垂直color='white', # 颜色fontsize=16, # 字体)

第七部分

# 主标题draw_curved_text(ax, # 轴对象"Saitama", # 文本r=1.09, # 半径center_angle=90, # 中心对齐char_spacing=4) # 间隔# 创建图例legend_handles = [Patch(facecolor=c_arc_pink, label=categories[0]),Patch(facecolor=c_arc_blue, label=categories[1]),Patch(facecolor=c_arc_peach, label=categories[2]),Patch(facecolor=c_arc_purple, label=categories[3]),Patch(facecolor=c_bar_lb, label=categories[4]),Patch(facecolor=c_bar_pe, label=categories[5]),Patch(facecolor=c_bar_pu, label=categories[6])]

第八部分

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

如何应用到你自己的数据

1.设置原始数据的保存路径,执行部分:
r'data.xlsx'2.设置是否要进行批量绘图,执行部分:
plot_all = True3.提取绘图数据和分类数据,主绘图函数部分:
texts = [f"{int(val)}%" for val in df_real['Value']]categories = df_real['Category'].tolist()
4.设置绘图结果的保存地址,主绘图函数部分:
plt.savefig(fr'Scheme_{scheme_id}.png', bbox_inches='tight')
往期内容
