当前位置:首页>python>期刊图片复现|Python绘制多层圆环图/旭日图

期刊图片复现|Python绘制多层圆环图/旭日图

  • 2026-10-10 13:44:01
期刊图片复现|Python绘制多层圆环图/旭日图

代码绘制成果展示

论文:Assessment and early warning of the coupled carrying capacity of water  resources, environment, and ecology: A case study of Ordos
论文原图
仿图
多种配色

代码解释

第一部分

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

第二部分

颜色库的设置以及配色方案的选择
# =========================================================================================# ======================================2.颜色库=======================================# =========================================================================================COLOR_SCHEMES = {    1: {        'Driving': ('#D8BDC6', '#C69BA6', '#C69BA6'),        'Pressure': ('#AED4F2', '#86B7E3', '#2E75B6'),        'State': ('#EACFB4', '#DE9E68', '#C67E3F'),        'Impact': ('#FCE5B1', '#FFD26F', '#EAA816'),        'Response': ('#C8D1A3', '#8E9E44', '#788836')    },    60: {        'Driving': ('#F5EEF8', '#D7BDE2', '#633974'),        'Pressure': ('#EAF2F8', '#A9CCE3', '#154360'),        'State': ('#E8F6F3', '#A3E4D7', '#0E6655'),        'Impact': ('#E9F7EF', '#A9DFBF', '#196F3D'),        'Response': ('#FEF5E7', '#FAD7A0', '#A04000')    }}SCHEME_ID = 60  #设置使用的配色方案color_map = COLOR_SCHEMES.get(SCHEME_ID, COLOR_SCHEMES[1])  #获取配色方案

第三部分

绘图函数:数据准备与分组
# =========================================================================================# ======================================5.绘图函数======================================# =========================================================================================def plot_sunburst_chart(df):    grouped = df.groupby('Subsystem (Inner)', sort=False)  #按照Subsystem列进行分组    categories = grouped.first().index.tolist()  #获取分组后的内层类别并转换为列表    inner_values = grouped['Subsystem Weight'].first().tolist()  #获取内层数值    counts = grouped.size().tolist()  #获取每个分组包含的数量    outer_labels = df['Indicator (Outer)'].astype(str).tolist()  #外层名称    outer_values = df['Indicator Weight'].tolist()  #获取外层数据    inner_colors = [color_map[cat][1] for cat in categories]  #内层颜色    outer_colors = []  #外层颜色列表    label_text_colors = []  #外层标签文字颜色列表

第四部分

绘图函数:初始化画布与绘制双层圆环
    #创建画布    fig, ax = plt.subplots(figsize=(10, 10))    outer_radius = 1.0  #外层圆环的半径    gap = 0.1 #内外层圆环之间的间隙    inner_radius = outer_radius - 0.2 - gap  #内层圆环的半径                           radius=outer_radius,  #半径                           colors=outer_colors,  #颜色                           startangle=start_angle,  #起始角度                           counterclock=False,  #顺时针                          radius=inner_radius,  #内层半径                          colors=inner_colors,  #颜色                          startangle=start_angle,  #起始角度                          counterclock=False,  #顺时针

第五部分

绘图函数:设置内层圆环的文本标签
    #遍历内层圆环的每一个扇形    for i, w in enumerate(wedges_in):        ang = (w.theta2 - w.theta1) / 2. + w.theta1  #扇形的中心角度        rad_ang = np.deg2rad(ang)  #将角度转换为弧度        r_label = inner_radius - 0.5 / 2  #内层标签显示的半径位置        x = r_label * np.cos(rad_ang)  #标签x坐标        y = r_label * np.sin(rad_ang)  #标签y坐标        text_content = f"{categories[i]}\n{inner_values[i]:.2f}"  #文本内容        #添加文本        ax.text(x,  #x                y,  #y                text_content,  #文本内容                ha='center',  #水平                va='center',  #垂直                fontsize=20,  #字体大小                fontweight='bold',  #加粗                color='black')  #字体颜色

第六部分

绘图函数:设置外层圆环的文本标签以及引导线
     #注释框样式    bbox_props = dict(boxstyle="square,pad=0.2",  #形状,内边距                      fc="w",  #填充颜色                      ec="none",  #无边框颜色                      alpha=0)  #透明度    #遍历外层圆环的每一个扇形    for i, w in enumerate(wedges_out):        ang = (w.theta2 - w.theta1) / 2. + w.theta1  #扇形的中心角度        rad_ang = np.deg2rad(ang)  #将角度转换为弧度        #根据x的正负号确定文本对齐方式        horizontalalignment = {-1: "right", 1: "left"}[int(np.sign(x))]        #文本标签的最终坐标位置        xy_text = (x * 1.2, y * 1.2)        #添加文本        ax.annotate(label_str,  #文本                    xy=(start_x, start_y),  #指向的点坐标                    xytext=xy_text,  #文本放置的坐标                    horizontalalignment=horizontalalignment,  #水平                    verticalalignment="center",  #垂直                    fontsize=16,  #字体大小                    fontweight='bold',  #字体加粗                    color=label_text_colors[i],  #字体颜色                    arrowprops=arrow_props,  #箭头属性                    bbox=bbox_props)  #文本框属性

第七部分

绘图函数:图例设置
    legend_patches = []  #初始化图例图块列表    #创建图例    plt.legend(handles=legend_patches,  #图例图块               loc='lower center',  #位置               bbox_to_anchor=(0.5, -0.18),  #位置坐标               ncol=5,  #列               frameon=False,  #不显示图例边框               prop={'weight': 'bold', 'size':22},#字体粗细、大小               columnspacing=0.9,  #列间距               handletextpad=0.1,  #色块和文字之间的距离               labelspacing=0.5  #行间距               )

第八部分

执行部分
# =========================================================================================# ======================================6.执行部分======================================# =========================================================================================if __name__ == "__main__":    data_file_path = fr"data.xlsx"  #文件路径    df = pd.read_excel(data_file_path)  #读取数据    #调用绘图函数    plot_sunburst_chart(df)

如何应用到你自己的数据

1.设置配色:

SCHEME_ID = 60  #设置使用的配色方案

2.设置分组数据列:

grouped = df.groupby('Subsystem (Inner)', sort=False)  #按照Subsystem列进行分组

3.设置内层圆环的数据:

inner_values = grouped['Subsystem Weight'].first().tolist()  #获取内层数值

4.设置外层圆环的数据:

outer_labels = df['Indicator (Outer)'].astype(str).tolist() outer_values = df['Indicator Weight'].tolist()  

5.设置绘图结果的保存地址:

plt.savefig(fr"{SCHEME_ID}.png", dpi=300, bbox_inches='tight')

6.设置原始数据的保存路径:

data_file_path = fr"data.xlsx"  #文件路径

推荐

期刊图片复现|Python绘制二维偏依赖PDP图
期刊复现|python绘制基于SHAP分析和GAM模型拟合的单特征依赖图
期刊图片复现|python绘制带有渐变颜色shap特征重要性组合图(条形图+蜂巢图)
期刊复现|用Python绘制SHAP特征重要性总览图、依赖图、双特征交互效应SHAP图,解锁XGBoost模型的终极奥秘
期刊图片复现|Python绘制shap重要性蜂巢图+单特征依赖图+交互效应强度气泡图+交互效应依赖图(回归+二分类+分类)

获取方式

公众号中的所有所有的免费代码都已经下架了,都并入到付费部分里了,付费合集代码和数据的购买通道已经开通,全部合集100元,后续将会持续更新,决定购买请后台私信我,注意只会分享练习数据和代码文件,不会提供答疑服务,代码文件中已经包含了每行代码的完整注释,购买前请确保真的需要!!!

最新文章

随机文章