当前位置:首页>python>Python卡通风格套图(2):相关性分析热图

Python卡通风格套图(2):相关性分析热图

  • 2026-10-10 18:13:43
Python卡通风格套图(2):相关性分析热图

代码绘制成果展示

多种配色

代码解释

第一部分

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

第二部分

颜色库的设置,配色方案的选择,相关性分析方法选择,显著性阈值设置,背景色设置
# =========================================================================================# ======================================2.颜色库=======================================# =========================================================================================COLOR_SCHEMES = {    1: ['#5ca2fb', '#8ec3a5', '#ff9f9b', '#abe5ea', '#fdf6c2', '#c9cbfd', '#bae8ca', '#02ba6f', '#ff9999', '#99ccff'],}SCHEME_ID = 60  #使用的颜色方案CORR_METHOD = 'pearson'  #指定相关性计算方法P_VALUE_THRESHOLD = 0.05  #显著性的P值阈值BG_COLOR = '#ffffff'  #背景颜色colors = COLOR_SCHEMES[SCHEME_ID]  #提取出对应的颜色列表color_pos = colors[0]  # 正相关的极端色color_neg = colors[7]  # 代表负相关的极端色

第三部分

辅助函数(颜色映射),将离散的数值(-1 到 1)转化为平滑的渐变色。

# =========================================================================================# ======================================3.辅助函数,用来将系数值映射到渐变色系======================================# =========================================================================================def get_interpolated_color(val):    c_p = np.array(mcolors.to_rgb(color_pos))  #正相关HEX颜色转换成RGB    c_n = np.array(mcolors.to_rgb(color_neg))  #负相关HEX颜色转换成RGB    c_w = np.array([1.0, 1.0, 1.0])  #纯白色的RGB数组    if val > 0:        c = val * c_p + (1 - val) * c_w  #将白色与正相关颜色按照数值比例进行线性插值计算    else:        c = (-val) * c_n + (1 + val) * c_w  #将白色与负相关颜色按照绝对值比例进行线性插值计算    return tuple(c)

第四部分

绘图函数:画布初始化与阴影特效设置

# =========================================================================================# ======================================4.绘图函数======================================# =========================================================================================def draw_cartoon_policy_chart(labels, corr_matrix, p_matrix):    # 创建画布    fig, ax = plt.subplots(figsize=(14, 12))    fig.patch.set_facecolor(BG_COLOR)  #设置外围的背景色    ax.set_facecolor(BG_COLOR)  #设置绘图区主坐标系的背景色    n = len(labels)  #标签的总数量    CELL_SIZE = 10  #相关性方块的固定尺寸    SPACING = 11.5  #单元格之间的间隔

第五部分

绘图函数:循环绘制小方块,绘制相关性系数

    #遍历矩阵的行    for i in range(n):        for j in range(n):  #遍历列            val = corr_matrix[i, j]  #获取第 i 行、第 j 列对应的相关系数数值            p_val = p_matrix[i, j]  #显著性检验            x_pos = j * SPACING  #当前方块中心点的X坐标            y_pos = (n - 1 - i) * SPACING  #Y坐标            # 根据 P 值是否小于显著性标准来决定文字变红还是黑色            text_color = 'red' if p_val < P_VALUE_THRESHOLD else 'black'            # 在对应方块中心点的 X 轴横坐标准备写入数值文本            ax.text(x_pos,  #X                    y_pos,  #Y                    f"{val:.2f}",  #文本                    ha='center',  #水平                    va='center',  #垂直                    fontsize=11,  #大小                    fontweight='bold',  #加粗                    color=text_color,  # 文本颜色                    bbox=dict(boxstyle="circle,pad=0.2",  #圆形底色框                              facecolor="white",  #圆形文字背景框的底色                              edgecolor="black",  #圆形文字背景框边缘线颜色                              linewidth=1.5),  #边缘线的粗细                    zorder=10)  #层

第六部分

绘图函数:设置坐标轴和标签文本

   ax.axis('off')  #隐藏默认的刻度线、刻度值    #遍历所有的标签    for idx, label in enumerate(labels):        #y轴标注        ax.text(-CELL_SIZE / 2 - 2,  #x                (n - 1 - idx) * SPACING,  #y                label,  #标签                ha='right',  #水平                va='center',  #垂直                fontsize=14,  #字体大小                fontweight='bold',  #加粗                color='#444',  #颜色                )

第七部分

绘图函数:设置颜色条

    cb_x = (n - 1) * SPACING + CELL_SIZE / 2 + 6  #颜色条起始X轴坐标    cb_y_bottom = -CELL_SIZE / 2  #颜色条底部Y坐标    cb_y_top = (n - 1) * SPACING + CELL_SIZE / 2  #颜色条顶部Y坐标    cb_width = 4.5  #宽度    #绘制承载颜色条本体的白色垫底外壳    cb_base = patches.FancyBboxPatch(        (cb_x, cb_y_bottom),  #坐标        cb_width,  #宽度        cb_y_top - cb_y_bottom,  #高度        boxstyle="round,pad=0,rounding_size=1.5",  #圆角        mutation_aspect=1,  #圆角的比例        facecolor='white',  #填充色        edgecolor='white',  #边框色        linewidth=2.5,  #线段粗细        zorder=2  #层    )    scale_vals = [1.0, 0.5, 0.0, -0.5, -1.0]  #颜色条数值刻度    # 遍历    for val in scale_vals:        #算出该数值刻度具体对Y轴的坐标        y_i = cb_y_bottom + ((val + 1.0) / 2.0) * (cb_y_top - cb_y_bottom)        #添加标注        ax.text(cb_x + cb_width + 4,  #x                y_i,  #y                f"{val:.1f}",  #文本                ha='left',  #水平                va='center',  #垂直                fontsize=13,  #大小                fontweight='bold',  #加粗                color='#333',  #颜色                zorder=6)  #层

第八部分

绘图函数:设置画布边界、外框、标题与导出保存

    ax.set_xlim(-22, cb_x + cb_width + 16)  #X轴范围    ax.set_ylim(-18, cb_y_top + 15)  #Y轴范围    title_x = ((n - 1) * SPACING) / 2  #方块区域中线位置所在的X轴坐标    #加上标题    ax.text(title_x,  #X            cb_y_top + 9,  #y            f"Policy Analysis Heatmap ({CORR_METHOD.capitalize()})",  #文本            ha='center',  #水平            va='center',  #垂直            fontsize=26,  #大小            color='#111',  #颜色            fontweight='bold',  #加粗            )

第九部分

主程序执行部分,包括数据读取,相关性分析,绘图

# =========================================================================================# ======================================5.执行部分======================================# =========================================================================================if __name__ == '__main__':    INPUT_EXCEL_PATH = r'\data.xlsx'  #原始数据路径    df_raw = pd.read_excel(INPUT_EXCEL_PATH)  #读取数据    labels = df_raw.columns.tolist()  #提取标签    n = len(labels)  #统计到底有多少列数据    corr_matrix = np.zeros((n, n))  #用于存储相关系数    p_matrix = np.zeros((n, n))  #用于存储P检验数值结果    #遍历行    for i in range(n):        #遍历列        for j in range(n):            if i == j:  #行列号一样                corr_matrix[i, j] = 1.0  #相关系数                p_matrix[i, j] = 0.0  #P                corr_matrix[i, j] = corr  #相关系数                p_matrix[i, j] = p_val  #P    #调用绘图函数    draw_cartoon_policy_chart(labels, corr_matrix, p_matrix)

如何应用到你自己的数据

1.设置配色方案:

SCHEME_ID = 60  #使用的颜色方案

2.设置相关性分析方法:

CORR_METHOD = 'pearson'  #指定相关性计算方法

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

png_filename = fr'scheme_{CORR_METHOD}_{SCHEME_ID}.png'

4.设置原始数据的文件路径:

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

推荐

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

获取方式

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

最新文章

随机文章