当前位置:首页>python>期刊图片复现|Python绘制多区域分组环形柱状图

期刊图片复现|Python绘制多区域分组环形柱状图

  • 2026-09-21 21:25:55
期刊图片复现|Python绘制多区域分组环形柱状图
请尊重原创成果,未经允许不得转载,谢谢

成果展示

原图
该图展示了京津冀城市群在基准状态下涵盖决策变量与约束条件的多区域环形分组柱状图,11个独立的指标扇区,分别涵盖了IIR、EPE、PHE、RP、SIS、HB、NOD等决策指标,SO2、DUST、IEC和FDI等环境与资源约束指标;最外层切向标注指标名称,扇区内部通过虚线参考网格以及右侧边缘的刻度线与数字,构建了各指标的刻度范围;扇区内部并列的彩色柱体,分别代表Beijing、Tianjin、Hebei,各柱体的径向高度与柱顶外侧标注的具体数值精确对应其基准水平,底部图例清晰给出了区域颜色映射;此图广泛适用于地学、环境科学、生态学、遥感与地理信息科学,以及公共卫生与健康地和城市规划与可持续发展治理等众多交叉研究领域。
仿图
多种配色

代码解释

第一部分

库的导入以及字体设置
# =========================================================================================# ====================================== 1. 环境设置 =======================================# =========================================================================================import matplotlibimport matplotlib.pyplot as pltimport matplotlib.patches as patchesimport numpy as np

第二部分

设置颜色库
# =========================================================================================# ======================================2.颜色库=======================================# =========================================================================================COLOR_SCHEMES = {    1: {'bg': ['#EAF7F8', '#FEF0F2', '#F4ECF7', '#FFFDF0', '#F0FFF0', '#FFF5EE', '#F8F8FF', '#F0F8FF', '#F5FFFA',               '#FFF0F5', '#FFFFF0'], 'bars': ['#57C4AD', '#FCA5B2', '#978AC2']},}

第三部分

绘图参数初始化、数据提取与几何布局:定义了内外半径、字号、线宽、间隔角度等。为每一个扇区指标计算自适应上限,保证柱顶保留余量以便放置文本。计算有效角度总和总间隙,进而求出各扇区的跨度角。根据柱子数量和组内间隔比例,精准计算每根柱子所占的角度宽度和柱间距。以90°为起点,顺时针为每个扇区计算中心角、起始角和终止角。
def plot_advanced_forest_chart(df, scheme_id):    outer_arc_linewidth = frame_line_width  # 外弧线宽    category_label_radius = outer_radius + outer_arc_radial_gap * 0.5  # 类别标签半径    segment_center_angles = []    # 起始中心角度    current_center_angle = 90    # 遍历所有分段    for _ in range(n_segments):        segment_center_angles.append(current_center_angle)  # 当前分段的中心角        current_center_angle -= (segment_degree + gap_degree)  # 下一个中心角    segment_start_angles = [center - segment_degree / 2.0 for center in segment_center_angles]  # 各分段起始角度    segment_end_angles = [center + segment_degree / 2.0 for center in segment_center_angles]  # 各分段结束角度

第四部分

画布初始化、背景扇区与外侧装饰弧形绘制:画布初始化与边界限制,建立正方形画布,确保圆不畸变。在极坐标区间内绘制环形底色块,形成每个指标独立的展示区域。在背景扇形外侧留出一定间隙后,再绘制一层同色的外弧。
    # 创建画布    fig, ax = plt.subplots(figsize=(10, 10))    ax.set_aspect('equal', adjustable='box')  # 比例一致    figure_outermost_radius = outer_radius + outer_arc_radial_gap + outer_arc_thickness  # 图形最外侧半径    lim = (figure_outermost_radius + 0.15) * 1.05  # 坐标轴边界范围限制        ax.add_patch(background_wedge)  # 绘制        # 外侧弧状条形半径        arc_r_outer = outer_radius + outer_arc_radial_gap + outer_arc_thickness        # 创建        outer_arc_wedge = patches.Wedge(            center=(0, 0),  # 原点坐标            r=arc_r_outer,  # 半径            theta1=segment_start_angle,  # 起点角        )        ax.add_patch(outer_arc_wedge)  # 加到图上

第五部分

环形分组柱状图及柱顶动态数值绘制
        current_bar_start_angle = segment_start_angle + side_padding_degree  # 第一根柱子起始角        # 循环绘制组内每一个柱子        for j in range(num_bars_per_group):            # 创建柱子            bar_wedge = patches.Wedge(                center=(0, 0),  # 圆点                r=bar_top_radius,  # 半径                theta1=bar_theta1,  # 柱起点                theta2=bar_theta2,  # 柱终点                width=bar_radial_thickness,  # 高度                facecolor=bar_color,  # 填充色                edgecolor='black',  # 黑色边框                linewidth=bar_line_width,  # 线宽                zorder=2  # 层            )            ax.add_patch(bar_wedge)  # 加到图上            current_bar_start_angle += bar_angular_unit_width + intra_bar_gap_angle  # 更新起始角

第六部分

绘制扇区参考网格弧线、刻度标记与分类指标文本:在扇区内部刻度位置绘制圆弧虚线。

极坐标边缘刻度线与刻度值:在扇区右侧边缘向外延伸放射状黑色短刻度线,并标注具体的数值标签。计算指标扇区中心的径向切线角度,将指标名称沿外弧切线方向对齐放置,标示该扇区对应的数据指标。

        value_range = segment_max - segment_min  # 最大差值        annotation_fractions = [0.25, 0.5, 0.75, 1.0]  # 参考线百分        segment_mid_angle_deg_cat = segment_center_angles[i]  # 扇区中心角度        segment_mid_angle_rad_cat = np.radians(segment_mid_angle_deg_cat)  # 转弧度        label_x = category_label_radius * np.cos(segment_mid_angle_rad_cat)  # x        ax.text(label_x,  # x                label_y,  # y                metric_label,  # 文本                ha=ha_cat,  # 水平                va='center',  # 垂直                rotation=rotation_angle_cat,  # 旋转角                rotation_mode='anchor',  # 旋转锚点                fontsize=label_fontsize,  # 字号                fontweight='bold',  # 加粗                zorder=5)  # 层

第七部分

中心同心圆绘制、图例设置与绘图结果保存
    #绘制最内层圆    center_circle_outer = patches.Circle((0, 0),  # 中心                                         inner_radius - 0.02,  # 半径                                         facecolor='white',  # 填充颜色                                         edgecolor='black',  # 边颜色                                         linewidth=frame_line_width,  # 粗细                                         zorder=10)  # 层    #添加图例    ax.legend(handles=legend_handles,  # 句柄              loc='lower center',  # 位置              bbox_to_anchor=(0.5, -0.05),  # 坐标              ncol=3,  # 列              handletextpad=0.3,  #间隔              frameon=False,  # 外框              prop={'size': legend_fontsize,  # 字号                    'weight': 'bold'})  # 加粗

第八部分

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

如何应用到你自己的数据

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

df_real = pd.read_excel(r'data.xlsx') 

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

plot_all = True

3.设置要使用的绘图数据,绘图函数部分:

for _, row in df.iterrows():        metric_label = row['Metric']  # 指标名称        means = [row['Mean_1'], row['Mean_2'], row['Mean_3']]  # 均值

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

plt.savefig(fr'scheme_{scheme_id}.svg', bbox_inches='tight')

往期内容

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

最新文章

随机文章