当前位置:首页>python>Python卡通风格套图(5):山脊图

Python卡通风格套图(5):山脊图

  • 2026-09-02 19:17:58
Python卡通风格套图(5):山脊图

代码绘制成果展示

绘图结果
多种配色

代码解释

第一部分

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

第二部分

颜色库的设置以及配色方案的选择与提取
# =========================================================================================# ======================================2.颜色库=======================================# =========================================================================================COLOR_SCHEMES = {    1: ['#5ca2fb', '#8ec3a5', '#ff9f9b', '#abe5ea', '#fdf6c2', '#c9cbfd', '#bae8ca', '#02ba6f', '#ff9999', '#99ccff'],}SCHEME_ID = 1  #要使用的方案colors = COLOR_SCHEMES[SCHEME_ID]  #提取

第三部分

绘图函数:画布设置与基础变量初始化
# =========================================================================================# ======================================3.绘图函数=======================================# =========================================================================================def draw_cartoon_policy_chart(df):    BG_COLOR = '#ffffff'  #纯白色    #创建画布    fig, ax = plt.subplots(figsize=(17, 12))    fig.patch.set_facecolor(BG_COLOR)  #画布颜色    ax.set_facecolor(BG_COLOR)  #绘图区域颜色

第四部分

绘图函数:数据处理与核密度估计,遍历每一列数据,计算数据的分布曲线以及中位数位置。
    # 遍历每一列    for i in range(num_groups):        idx = np.argmin(np.abs(real_x_axis - actual_median))  # 找到X轴坐标数组中最接近中位数的那个点的索引        median_visual_y = y_curve_normalized[idx]  #根据刚刚找到的索引,在归一化后的Y轴曲线数组中找到对应的Y轴高度值        # 将当前分组计算出的各种绘图参数以字典的形式追加到列表中        ridges_data.append({            'name': str(group_name),  # 分组的名称            'x_visual': real_x_axis,  # X轴坐标数组            'y_curve': y_curve_normalized,  #Y轴曲线高度数组            'median_real_val': int(round(actual_median)),  #中位数            'median_x': actual_median,  # X坐标            'median_y': median_visual_y  # Y        })

第五部分

绘图函数:定义阴影效果,循环绘制出每一层山脊
    #图形对象的路径特效列表,用于生成具有立体感的渐变实体阴影    solid_shadow_effects = [        # 添加第一层阴影        pe.SimplePatchShadow(offset=(0, -1.5),  #偏移                             shadow_rgbFace='#909fa6',  #阴影填充颜色                             alpha=0.15),  #透明度    ]    #遍历所有分组,准备开始逐层绘制山脊    for i in range(num_groups):        #分组名称        ax.text(-7.5,  #X                y_base + 0.5,  # Y                d['name'],  #文本内容                ha='right',  #水平                va='center',  #垂直                fontsize=15,  #字体大小                fontweight='bold',  #加粗                color='#333',  #颜色                zorder=i + 10)  #层级        #中位数文本        ax.text(d['median_x'],  #X                d['median_y'] + y_base + 0.5,  #Y                str(d['median_real_val']),  #数值                ha='center',  #水平                va='center',  #垂直                fontsize=12,  #大小                fontweight='bold',  #加粗                color='red',  #颜色                bbox=dict(boxstyle="circle,pad=0.3",  #圆形背景框                          facecolor="white",  #背景框的内部填充颜色                          edgecolor="black",  #背景框的边缘线颜色                          linewidth=1.5),  #背景框边缘线的宽度                zorder=i + 20)  #层级

第六部分

绘图函数:底部x轴线绘制,刻度设置,刻度标注设置
   #底部水平基准横线    ax.plot([-7.5, 157.5],  #X坐标范围            [-0.5, -0.5],  # Y坐标            color='#888888',  #颜色            linewidth=2.5,  #线条宽度            zorder=0)  #层级        #刻度文本标签        ax.text(pos,  # X                -1.2,  #Y                str(label),  #内容                ha='center',  #水平                va='top',  #垂直                fontsize=13,  #字体大小                color='#555')  #字体颜色

第七部分

绘图函数:外围虚线框绘制,标题绘制,结果保存
    # X轴标题    ax.text(75.0,  # X            -2.5,  #Y            "Effect Score",  #文本            ha='center',  # 水平            va='top',  # 垂直            fontsize=16,  #大小            fontweight='bold',  # 加粗            color='#444')  # 颜色    #标题    ax.text(63.75,  #X            28.5,  #Y            "Policy Analysis Ridge Chart",  #文本            ha='center',  #水平居中            va='center',  #垂直居中            fontsize=26,  # 字体大小            color='#111',  # 字体颜色            fontweight='bold')  # 加粗    ax.axis('off')  # 隐藏自带的坐标轴框架    ax.set_xlim(-45.0, 172.5)  # x轴范围    ax.set_ylim(-4.5, 30.0)  # Y轴范围

第八部分

执行部分
# =========================================================================================# ======================================4.执行部分=======================================# =========================================================================================if __name__ == '__main__':    data_path = r'data.xlsx'  #数据路径    df_local = pd.read_excel(data_path)  #读取数据    draw_cartoon_policy_chart(df_local)#绘图

如何应用到你自己的数据

1.设置配色方案:

SCHEME_ID = 1  #要使用的方案

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

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

3.设置原始数据路径:

data_path = r'data.xlsx'  #数据路径

推荐

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

获取方式

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

最新文章

随机文章