当前位置:首页>python>期刊图片复现|Python绘制百分比饼图+环形堆叠图组图

期刊图片复现|Python绘制百分比饼图+环形堆叠图组图

  • 2026-09-02 15:54:46
期刊图片复现|Python绘制百分比饼图+环形堆叠图组图
请尊重原创成果,未经允许不得转载,谢谢

代码绘制成果展示

原图
百分比饼图+环形堆叠图组图:此图直观地展示了BTH地区在2030年关键部门的终端能源消费结构与规模。图表左上角的图例用不同颜色清晰界定了Oil、Gas、Coal、Biomass、Wind、Solar和Electricity七种能源类型。图表中心的饼图部分直接表达了宏观层面各项能源在总能耗中的百分比。围绕中心饼图的外围半环形多层条形图则进一步将能源消耗总规模细化分配到了六个核心消耗部门:Electricity、Industrial、Road、Buildings、Residential fuel和Non-road。通过每一层半圆环的弧长和内部的颜色分段,能够精准解读出每个特定部门的绝对能耗量及其依赖的能源种类构成。
仿图
多种配色

代码解释

第一部分

库的导入以及字体设置
# =========================================================================================# ====================================== 1. 环境设置 =======================================# =========================================================================================import matplotlib.pyplot as pltimport numpy as npimport matplotlib.patches as mpatchesimport pandas as pd

第二部分

设置颜色库
# =========================================================================================# ======================================2.颜色库=======================================# =========================================================================================COLOR_SCHEMES = {    1: ['#FFD060', '#B3B3B3', '#FA685B', '#76B7B2', '#B2DF8A', '#85D4E3', '#4B92F0'],}

第三部分

数据准备与画布初始化:分离出柱状图数据和饼图数据。提取各类别生成图例标签,从颜色库中匹配配色方案。设置线宽、刻度长度、背景色与边线色。遍历柱状图数据计算出各扇区的总和,并找出最大值,通过向上取整确定图表的最外层刻度,划分等距步长,生成刻度值列表。创建画布,指定子图投影模式为极坐标。设定极坐标的正北方向为0度角,设置绘制方向为顺时针,关闭原生的极坐标轴线。初始化同心圆环的起点半径、厚度以及中心饼图的半径。
# =========================================================================================# ======================================3.绘图函数=======================================# =========================================================================================def plot_advanced_forest_chart(data_dict, scheme_id):    # 环形柱状图最大值    max_sum = max([sum(v for v in sector.values() if v > 0) for sector in bar_data.values()], default=0)    max_scale = math.ceil(max_sum)  # 向上取整得最大刻度    tick_step = max_scale // 4  # 刻度步长    tick_vals = [i * tick_step for i in range(5)]  # 生成刻度值    # 创建画布    fig, ax = plt.subplots(figsize=(10, 10), subplot_kw={'projection': 'polar'})    ax.set_theta_zero_location('N')  # 起始角    ax.set_theta_direction(-1)  # 顺时针绘图    ax.axis('off')  # 去掉默认极坐标轴

第四部分

绘制堆叠环形柱状图:循环遍历每一个大类对应某一个环,将该环的绘图起始角度重置为 0。第二层嵌套循环遍历该分类下各个类型及其对应的值。计算当前值所应占据的弧宽。同一个环内,前一段弧画完后,下一段弧紧贴着上一段的尾部开始画,从而实现堆叠效果。
    # 绘制堆积环形柱状图    width_factor = (3 * np.pi / 2) / max_scale  # 计算单位数值对应的弧度            ax.bar(start_angle,  # 起始角                   height=thickness,  # 宽                   width=angle_width,  # 弧长                   bottom=r,  # 底部半径                   color=colors.get(fuel, '#000000'),  # 填充色                   align='edge',  # 边缘对齐                   edgecolor='none')  # 边框            start_angle += angle_width  # 累加起始角

第五部分

绘制内部饼图:处理绘图区中心的饼图,并且为其排名前三的类别加上百分比标签。
    # 获取饼图前三名    sorted_pie = sorted([(k, v) for k, v in pie_data.items() if v > 0], key=lambda x: x[1], reverse=True)    top3_fuels = [k for k, v in sorted_pie[:3]]  # 提取占比前三名名称    pie_text_info = []  # 用于保存饼图文字标签信息    # 绘制饼图百分比标签    for fuel_key, mid_angle, text_str in pie_text_info:        ax.text(mid_angle,  # 极角                pie_radius * 0.65,  # 半径                text_str,  # 文本                ha='center',  # 水平                va='center',  # 垂直                fontweight='bold',  # 加粗                fontsize=14)  # 字号

第六部分

绘制辅助线、文本标签、图例与结果保存:绘制两条径向线,一条是起始线,另一条是结束线。绘制最外圈的弧形轴线。循环之前计算好的刻度线位置。对于每一个位置计算出角度后,用短径向线画出向外突出的刻度标记,并在刻度外侧标注数值。同时在终点线旁加单位说明。对每个分类在正北方绘制文本名称。
    # 绘制0度起始边界线    ax.plot([0, 0],  # 角度            [pie_radius, radii[-1] + thickness],  # 半径            color=line_color,  # 颜色            linewidth=arc_linewidth)  # 线宽    # 绘制末端刻度文字    ax.text(3 * np.pi / 2,  # 角度            outer_r + tick_len + 0.25,  # 半径            str(tick_vals[-1]),  # 刻度值            ha='right',  # 水平            va='center',  # 垂直            fontweight='bold',  # 加粗            fontsize=14)  # 字号    #绘制标题    fig.suptitle('2030-BTH',  # 文本                 fontsize=24,  # 字号                 fontweight='bold',  # 加粗                 y=0.92)  # y

第七部分

执行部分
# =========================================================================================# ======================================4.执行部分======================================# =========================================================================================if __name__ == '__main__':    excel_filename = r'data.xlsx'  #文件路径    #读取数据    df_bar = pd.read_excel(excel_filename, sheet_name='Bar_Data')    df_pie = pd.read_excel(excel_filename, sheet_name='Pie_Data')    scheme_id = 1    print('正在绘制并保存方案:', scheme_id)    plot_advanced_forest_chart(df_real, scheme_id)

如何应用到你自己的数据

1.设置原始数据的保存路径,执行部分:

excel_filename = r'\data.xlsx'  #文件路径

2.分别读取两部分图的数据,执行部分:

df_bar = pd.read_excel(excel_filename, sheet_name='Bar_Data')df_pie = pd.read_excel(excel_filename, sheet_name='Pie_Data')

3.设置是否要进行批量绘图,执行部分:

plot_all = True

4.获取数据,绘图函数部分:

bar_data = data_dict['bar']  # 柱状图数据pie_data = data_dict['pie']  # 饼图数据

5.设置绘图结果的保存地址,绘图函数部分:

fig.savefig(fr'scheme_{scheme_id}.png', dpi=300,bbox_inches='tight'

往期内容

期刊图片复现|Python绘制二维偏依赖PDP图
期刊复现|python绘制基于SHAP分析和GAM模型拟合的单特征依赖图
期刊图片复现|python绘制带有渐变颜色shap特征重要性组合图(条形图+蜂巢图)
期刊复现|用Python绘制SHAP特征重要性总览图、依赖图、双特征交互效应SHAP图,解锁XGBoost模型的终极奥秘
期刊图片复现|Python绘制shap重要性蜂巢图+单特征依赖图+交互效应强度气泡图+交互效应依赖图(回归+二分类+分类)
需要请后台私信我,注意只会分享练习数据、参考论文和代码文件,仅提供有关代码的答疑,不会提供其他答疑服务,代码文件中已经包含了每行代码的完整注释!!!

最新文章

随机文章