
代码绘制成果展示












代码解释

第一部分

# =========================================================================================# ====================================== 1. 环境设置 =======================================# =========================================================================================import matplotlib.pyplot as pltimport matplotlib.colors as mcolorsimport pandas as pdimport numpy as npimport matplotlibmatplotlib.rcParams['pdf.fonttype'] = 42matplotlib.rcParams['ps.fonttype'] = 42plt.rcParams['font.family'] = 'Times New Roman'plt.rcParams['mathtext.fontset'] = 'stix'

第二部分

# =========================================================================================# ======================================2.颜色库=======================================# =========================================================================================color_schemes = {1: ['#1a3365', '#2c5ca7', '#4285c5', '#6baed6', '#9ecae1', '#c6dbef', '#deebf7', '#f7fbff', '#fdf2e3','#f4ccb3', '#f08e70', '#eb4d3d', '#df2d23', '#c81a1a', '#8b0d0d'],}

第三部分

# =========================================================================================# ======================================3.绘图函数=======================================# =========================================================================================def draw_3d_pie_chart():#创建画布fig, ax = plt.subplots(figsize=(12, 10), dpi=300)#绘制当前深度的饼图层wedges_side, _ = ax.pie(sizes, #各个扇区的数据colors=colors, #颜色startangle=90, #饼图的起始绘制角度radius=1 #半径)set_center((0, -i * step)) #扇区的中心set_edgecolor('none') #边缘颜色set_antialiased(True) #边缘平滑set_zorder(depth_layers - i) #层

第四部分

angles = [w.theta1 for w in wedges] #顶层所有扇区的起始角度# 遍历每一个扇区的起始角度ax.plot([x, x], #x起始结束[y, y - total_thickness - 0.7], #y起始结束color='white', #分隔线颜色linewidth=1.5, #线宽zorder=depth_layers + 0.5, #层clip_on=False) #允许超出绘图边界

第五部分

#遍历扇区和文本for i, (w, autotext) in enumerate(zip(wedges, autotexts)):percent = sizes[i] / sum(sizes) * 100 #计算当前扇区实际占据的百分比数值ang_rad = np.radians((w.theta1 + w.theta2) / 2) #计算扇区角度范围的中间夹角转换为弧度autotext.set_position((x_text, y_text)) #添加文本autotext.set_fontsize(11) #文本大小ax.plot([x, x_line_end], #x[y, y_line_end], #ycolor='gray', #颜色linewidth=0.8, #粗细zorder=depth_layers + 2) #层

第六部分

ax.) #坐标系的纵横比#图例leg = ax.legend(wedges, #图例形状labels, #文字loc="center left", #位置)#遍历图例文本for text in leg.get_texts():text.set_color('black') #颜色# 设置标题plt.title("HHH YSHJXLXXZTHDSMYCSKYA (3D)", #文本fontsize=18, #大小pad=40, #间距loc='left') #位置

第七部分

# =========================================================================================# ======================================4.执行部分=======================================# =========================================================================================if __name__ == '__main__':excel_filename = r"data.xlsx" #原始数据df_data = pd.read_excel(excel_filename) #读取数据labels = df_data['Chemical Compounds'].tolist() #类别sizes = df_data['Composition (%)'].tolist() #数值#设置是否批量绘图plot_all = Trueif plot_all:for scheme_id in color_schemes.keys():draw_3d_pie_chart()print('正在绘制方案:',scheme_id)else:scheme_id = 1draw_3d_pie_chart()

如何应用到你自己的数据

1.设置原始数据的保存路径,执行部分:
excel_filename = r"data.xlsx" #原始数据2.提取类别、数值数据,执行部分:
labels = df_data['Chemical Compounds'].tolist() #类别sizes = df_data['Composition (%)'].tolist() #数值
3.设置是否要进行批量绘图,执行部分:
plot_all = True4.设置绘图结果的保存地址,执行部分:
plt.savefig(fr"3D_Pie_{scheme_id}.png" , dpi=300, bbox_inches='tight')
推荐


获取方式
