当前位置:首页>python>期刊图片复现|Python绘制半圆形堆叠柱状图

期刊图片复现|Python绘制半圆形堆叠柱状图

  • 2026-10-11 06:11:47
期刊图片复现|Python绘制半圆形堆叠柱状图

代码绘制成果展示

论文:Increasingly frequent compound climate events worsen economic  disparities in China's urban agglomerations
论文原图
仿图
多种配色

代码解释

第一部分

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

第二部分

颜色库的设置以及配色方案的选择与提取
# =========================================================================================# ======================================2.颜色库=======================================# =========================================================================================COLOR_SCHEMES = {    1: ['#8C8C8C', '#9C8396', '#F07E81', '#FCB38C', '#FCD171', '#FCF2A0', '#E2E2E2', '#DBE196', '#8EC092'],}scheme_id = 60  #使用的颜色方案color_scheme = COLOR_SCHEMES[scheme_id]  #提取配色

第三部分

绘图函数:创建画布与极坐标轴初始化
# =========================================================================================# ======================================3.绘图函数=======================================# =========================================================================================def plot_half_polar_stacked_bar(df, regions, title):    #创建画布    fig = plt.figure(figsize=(9, 7))    ax = fig.add_subplot(111, polar=True)  #添加极坐标子图    ax.set_thetamin(0)  #极坐标的角度最小值    ax.set_thetamax(180)  #极坐标的角度最大值

第四部分

绘图函数:计算角度、柱体宽度与绘制堆叠柱子。
    n_years = len(df.index)  #获取年份的个数    years = df.index.values  #提取年份数组    gap = 0.05  #柱子分布两端的角度间隙    angles = np.linspace(np.pi - gap, gap, n_years)  #在半圆内生成均匀分布的极角    width = (np.pi / n_years) * 0.85  #每个柱状图的角宽度    bottoms = np.zeros(n_years)  #初始化堆叠柱状图底部的起点数组

第五部分

绘图函数:绘制径向刻度与网格线
    ax.set_ylim(0, 80)  #极径的显示范围    ax.set_yticks([0, 10, 20, 30, 40, 50, 60, 70, 80])  #需要显示的极径刻度位置    ax.set_yticklabels([])  # 隐藏默认的极径刻度标签文字    # 网格线    ax.grid(color='#E0E0E0', linestyle='-', linewidth=0.8, zorder=0)        # 添加右侧刻度标注        ax.text(0,   # 角度                y_val,  #高度                f"{y_val}",  #文本                ha='center',  #水平                va='top',  #垂直                fontsize=12,  #大小                fontweight='bold')  #加粗        # 绘制右侧的刻度线        ax.plot([0, 0.03],   # 角度                [y_val, y_val],  #高度                color='black',  # 颜色                lw=2,  #宽度                clip_on=False)  #允许绘制内容超出绘图框边界

第六部分

绘图函数:绘制极角刻度
    #要显示为主刻度的年份    xticks_years = [1990, 1995, 2000, 2005, 2010, 2015, 2020]    #使用线性插值计算出每个年份对应的极角位置    xticks_angles = np.interp(xticks_years,[years[0], years[-1]],[np.pi - gap, gap])    ax.set_xticks(xticks_angles)  #设置X轴刻度    #设置刻度标注    ax.set_xticklabels(xticks_years, fontsize=14, fontweight='bold')    #设置坐标轴外围的所有边框    for spine in ax.spines.values():        spine.set_linewidth(2)  #线宽        spine.set_color('black')  #颜色    # 隐藏极角刻度的默认外延线    ax.tick_params(axis='x', length=0, pad=8)

第七部分

绘图函数:绘制标题、图例与图表保存
    #标题    plt.figtext(0.1,  #x                0.85,  #y                title,  #内容                fontsize=16,  #大小                fontweight='bold',  #加粗                ha='left')  #左对齐    #遍历图例中的文字对象,加粗    for text in legend.get_texts():        text.set_fontweight('bold')    plt.tight_layout()  #自动调整子图参数

第八部分

执行部分
# =========================================================================================# ======================================4.执行部分======================================# =========================================================================================if __name__ == "__main__":    file_path = r'data.xlsx'  #原始数据路径    df_data = pd.read_excel(file_path, index_col=0)  #读取数据    region_list = df_data.columns.tolist()  # 提取列名,转换为列表形式(堆叠的区域名称)    #调用绘制函数    plot_half_polar_stacked_bar(        df=df_data,  #数据集        regions=region_list,  #区域列名列表        title="(a) Total change of GDP-CPWD exposure"  #标题    )

如何应用到你自己的数据

1.设置配色方案:

scheme_id = 60  #使用的颜色方案

2.设置径向的刻度位置:

ax.set_yticks([0, 10, 20, 30, 40, 50, 60, 70, 80])  #需要显示的极径刻度位置

3.设置角度的刻度位置:

xticks_years = [1990, 1995, 2000, 2005, 2010, 2015, 2020]

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

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

5.设置原始数据文件保存路径:

file_path = r'data.xlsx'  #原始数据路径

推荐

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

获取方式

公众号中的代码需要请后台私信我,注意只会分享练习数据和代码文件,不会提供答疑服务,代码文件中已经包含了每行代码的完整注释!!!

最新文章

随机文章