当前位置:首页>python>期刊图片复现|Python绘制堆叠条形图+弧状条形图组图

期刊图片复现|Python绘制堆叠条形图+弧状条形图组图

  • 2026-09-07 00:05:58
期刊图片复现|Python绘制堆叠条形图+弧状条形图组图
请尊重原创成果,未经允许不得转载,谢谢

代码绘制成果展示

论文:Road‐Level Charging Gaps and Infrastructure Enhancements in Japan's Electric Vehicle Transition
论文原图
此图为弧状条形图和水平堆叠条形图地组合图,最下方的图例详细映射了图形中七种颜色的具体分类含义。上方的四层半环形图由外至内分别代表了四种数据类别,其对应的弧线长度直观地反映了各类的百分比大小;底部的水平堆叠条形图则展示了另一个分析维度下的三种类别的内部构成比例。此图适用于地学、遥感、生态、环境以及城市规划等领域的研究中;例如,它可用于同时展示某一特定空间网格内的土地覆盖类型占比与不同高程分布的比例;可用于刻画特定生境斑块内的优势物种组成比与不同营养级生物量的结构分布。
仿图
多种配色

代码解释

第一部分

库的导入以及字体设置
# =========================================================================================# ====================================== 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,  # x            text_y,  # y            texts[4],  # 文本            ha='center',  # 水平            va='center',  # 垂直            color='white', # 颜色            fontsize=16,  # 字体            )    # 添加第二部分矩形文本    ax.text(x2 + w_2 / 2,  # x            text_y,  # y            texts[5],  # 文本            ha='center',  # 水平            va='center',  # 垂直            color='#333333',  # 颜色            fontsize=16,  # 字体            )    # 添加第三部分矩形文本    ax.text(x3 + w_3 / 2,  # x            text_y,  # y            texts[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 = 1    selected_hex_colors = COLOR_SCHEMES[scheme_id]    print('正在绘制并保存方案:', scheme_id)    plot_advanced_forest_chart(df_real, scheme_id)

如何应用到你自己的数据

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

r'data.xlsx'

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

plot_all = True

3.提取绘图数据和分类数据,主绘图函数部分:

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')

往期内容

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

最新文章

随机文章