当前位置:首页>python>Python卡通风格套图(1):柱状图

Python卡通风格套图(1):柱状图

  • 2026-09-14 08:50:04
Python卡通风格套图(1):柱状图

代码绘制成果展示

多种样式
多种配色

代码解释

第一部分

库的导入以及字体设置
# =========================================================================================# ====================================== 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 = 59  #配色方案colors = COLOR_SCHEMES[SCHEME_ID]  #提取配色STYLE_ID = 3  #样式

第三部分

绘图函数:初始化画布与阴影特效设置。定义了后续画图需要的参数,包括柱子宽度、画圆角矩形需要的形变参数,样式3的最大高度。创造了一个立体的多层阴影特效。它通过叠加三层不断偏移且透明度依次递减的灰色块,最后再把本体画在最上面,模拟出了平滑的 3D 卡通投影效果。遍历待绘制的数据,动态计算出当前柱子的 X 坐标、高度,并按顺序循环获取当前柱子对应的填充颜色。
# =========================================================================================# ======================================4.绘图函数======================================# =========================================================================================def draw_cartoon_policy_chart():    BG_COLOR = '#ffffff'  #背景颜色    #创建画布    fig, ax = plt.subplots(figsize=(15, 8.5))    fig.patch.set_facecolor(BG_COLOR)  #设置图形对象的背景颜色    ax.set_facecolor(BG_COLOR)  #设置坐标系内部区域的背景颜色    WIDTH = 0.75  #柱子的宽度    ASPECT = 15.0  #设置绘制圆角矩形时的形变宽高比    MAX_HEIGHT = 150  # 设定背景外框的最大固定高度    #图形对象的路径特效列表,用于生成具有立体感的渐变实体阴影    solid_shadow_effects = [        # 添加第一层阴影        pe.SimplePatchShadow(offset=(0, -1.5),  #偏移                             shadow_rgbFace='#909fa6',  #阴影填充颜色                             alpha=0.15),  #透明度        # 添加第二层阴影        pe.SimplePatchShadow(offset=(1.5, -3.0),  #偏移                             shadow_rgbFace='#909fa6',  #阴影填充颜色                             alpha=0.1),  #透明度        # 添加第三层阴影        pe.SimplePatchShadow(offset=(3.0, -4.5),  #偏移                             shadow_rgbFace='#909fa6',  #阴影填充颜色                             alpha=0.05),  #透明度        pe.Normal()  # 在阴影层上方叠加原本正常的图形    ]    #遍历柱状图数据    for i, block inenumerate(bars_data):        bottom = 0  # 柱形图的起始Y坐标        x = x_positions[i]  #取出当前这一列应该放置的X轴中心坐标        h = block['h']  #读取当前柱子所代表的数据高度        c = colors[i % len(colors)]  #循环提取配色方案中的颜色分配给当前柱子

第四部分

绘图函数:样式 1 (实心带阴影圆角柱)
        # 判定如果当前选择的是样式1        if STYLE_ID == 1:            # 将定义好的立体阴影特效赋予该对象            p.set_path_effects(solid_shadow_effects)            ax.add_patch(p)  #添加到坐标系            #X坐标文本            ax.text(x,  #X                    h + 4,  #Y                    str(h),  #高度数值                    ha='center',  #水平                    va='bottom',  #垂直                    fontsize=18,  #字体大小                    fontweight='bold',  #粗体                    color='#333',  #字体颜色                    )

第五部分

绘图函数:样式 2 (虚线空心发光柱)
        #样式2        elif STYLE_ID == 2:            #绘制第一个作为阴影底层的虚线圆角矩形            ax.add_patch(patches.FancyBboxPatch(                (x - WIDTH / 2 + 0.06,  #左下角X坐标                 bottom - 1.0),  # 左下角Y坐标                WIDTH,  # 宽度                h,  # 高度                boxstyle="round,pad=0,rounding_size=0.15",  #圆角                mutation_aspect=ASPECT,  # 形变比例                facecolor='none',  #填充色                edgecolor='#909fa6',  #边框颜色                linestyle='--',  #样式                linewidth=3.5,  #线宽                alpha=0.25,  #透明度                zorder=1  #层级            ))            #添加文本            ax.text(x,  #x                    h + 4,  # 高度                    str(h),  #高度标注                    ha='center',  # 水平                    va='bottom',  # 垂直                    fontsize=18,  #字体大小                    fontweight='bold',  #加粗                    color='#333',  #颜色                    )

第六部分

绘图函数:样式 3 (容量槽/温度计样式)
       #样式3        elif STYLE_ID == 3:            #画出容量槽的内测白边底框            ax.add_patch(patches.FancyBboxPatch(                (x - WIDTH / 2, bottom),  #坐标                WIDTH,  #宽度                MAX_HEIGHT,  #高度                boxstyle="round,pad=0,rounding_size=0.15",  #圆角设定                mutation_aspect=ASPECT,  #形变比例                facecolor='none',  # 空心                edgecolor='white',  # 边颜色                linewidth=5.5,  #线粗                zorder=2  #层级            ))            # 中心文字            ax.text(x,#x                    MAX_HEIGHT / 2,  #Y                    str(h),  #数值                    ha='center',  #水平                    va='center',  # 垂直                    fontsize=18,  #字体大小                    fontweight='bold',  #加粗                    color='red',  #数字颜色                    #添加一个圆形的背景                    bbox=dict(boxstyle="circle,pad=0.3",  #圆形,内外间距                              facecolor="white",  #填满色                              edgecolor="black",  #边线颜色                              linewidth=1.5),  #边线宽度                    zorder=10)  #层级

第七部分

绘图函数:坐标轴刻度、标题设置,外围虚线框添加,数值标注设置
    ax.axis('off')  #隐藏默认生成的坐标轴与刻度    max_x = max(x_positions) if x_positions else 15  # 获取当前X轴最右端坐标    rect_width = max_x + 2.5 #外框的总宽度    #外围虚线框    rect = patches.Rectangle((-1.2, -20),  #坐标                             rect_width,  #矩形宽度                             205,  #高度                             fill=False,  #填充色                             edgecolor='#cccccc',  #边线色                             linestyle='--',  #虚线                             linewidth=2,  # 线宽                             zorder=0)  #层    ax.add_patch(rect)  #添加    #绘制主标题    ax.text((max_x - 2.5) / 2 + 1,  #X            172,  #y            "Policy Analysis Chart",  #文本内容            ha='center',  #水平            va='center',  #垂直            fontsize=28,  #字体大小            color='#111',  # 颜色            fontweight='bold',  #加粗           )    #y轴标题    ax.text(-0.5,  #x            75,  #y            "Effect Score",  # #文本内容            rotation=90,  #旋转            ha='center',  #水平            va='center',  #垂直            fontsize=22, #字体大小            color='#444',   # 颜色            fontweight='bold', #加粗            )

第八部分

执行部分
# =========================================================================================# ======================================4.执行部分======================================# =========================================================================================if __name__ == '__main__':    excel_filename = r'data.xlsx'  #原始数据路径    df_data = pd.read_excel(excel_filename)  #读取数据    labels_x = df_data['X'].tolist()  #提取X轴数据    bars_data = [{'h': val} for val in df_data['Y'].tolist()]  # 提取y轴数值    x_positions = [1.5 * i for i in range(1, len(labels_x) + 1)]  #生成均匀递增坐标点数组,供每一根柱子排位使用    # 调用绘图函数    draw_cartoon_policy_chart()

如何应用到你自己的数据

1.设置配色方案:

SCHEME_ID = 59  #配色方案

2.设置绘图风格:

STYLE_ID = 3  #样式

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

png_filename = fr'scheme_{SCHEME_ID}_style_{STYLE_ID}.png'

4.设置原始数据文件的保存地址:

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

5.提取X轴的数据:

labels_x = df_data['X'].tolist()  #提取X轴数据

6.提取Y轴的数据:

bars_data = [{'h': val} for val in df_data['Y'].tolist()]  # 提取y轴数值

推荐

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

获取方式

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

最新文章

随机文章