当前位置:首页>python>Python绘制扇形相关性热图-包括pearson, spearman, kendall

Python绘制扇形相关性热图-包括pearson, spearman, kendall

  • 2026-10-11 06:19:04
Python绘制扇形相关性热图-包括pearson, spearman, kendall

代码绘制成果展示

代码解释

第一部分

导入库与全局样式配置,是代码实现的基础同时也是绘图前的准备工作。
# =========================================================================================# ====================================== 1. 库的导入 =========================================# =========================================================================================import pandas as pdimport numpy as npimport matplotlib.pyplot as pltfrom matplotlib.colors import LinearSegmentedColormapfrom matplotlib.lines import Line2Dfrom scipy import statsimport sysplt.rcParams['font.family'] = 'Times New Roman'

第二部分

颜色库设置
# =========================================================================================# ======================================2.颜色库设置=========================================# =========================================================================================COLOR_THEMES = {    1: {'group_colors': {'TFs': '#3B5F8A', 'VIs': '#E68B3A', 'DVS': '#707070', 'PI': '#A65E60', 'MC': '#8A6B94'},        'heatmap_colors': ["#43A8A8", "white", "#D75F5F"], 'group_label_color': 'white'},}

第三部分

绘图函数

包含的参数:相关性系数值、显著性判断结果(True/False)、目标变量的名称、配色方案字典、相关性分析方法名称、所选配色方案的ID,用于文件名。

def create_correlation_circos(df, df_sig, targets, color_palette, method, scheme_id):

第四部分

设置扇形热图的布局参数

包括整个扇形的画布大小、扇形的大小区域、扇形的起始和结束角度、每个特征的中心角度和宽度、每一层的内半径位置、所使用的颜色映射等。

    heatmap_colors_value = color_palette['heatmap_colors']     fig, ax = plt.subplots(figsize=(16, 14), subplot_kw=dict(projection='polar'))    N_features = len(df)    total_fan_angle_deg = 150    total_fan_angle_rad = np.deg2rad(total_fan_angle_deg)     start_angle = (np.pi / 2) - (total_fan_angle_rad / 2)    end_angle = (np.pi / 2) + (total_fan_angle_rad / 2)    theta = np.linspace(start_angle, end_angle, N_features)     single_bar_span = total_fan_angle_rad / N_features    width = single_bar_span * 0.95     radii = np.arange(5, 5 + len(targets))    if isinstance(heatmap_colors_value, str):        cmap = plt.get_cmap(heatmap_colors_value)    else:        colors = heatmap_colors_value        nodes = [0.0, 0.5, 1.0]        cmap = LinearSegmentedColormap.from_list("custom_cmap", list(zip(nodes, colors)))    norm = plt.Normalize(vmin=-1, vmax=1)

第五部分

循环绘制出每一层扇形图与图上的相关性、显著性的标注
外层循环绘制图

内层循环添加相关性和显著性的标注

for i, target_name in enumerate(targets):        r = radii[i]        values = df[target_name]        cell_colors = cmap(norm(values))        for j, val in enumerate(values):            angle = theta[j]            radius = r + 0.45            sig_marker = '*' if df_sig.iloc[j, i] else ''            text_val = f'{val:.2f}{sig_marker}'            rot = np.rad2deg(angle) - 90

第六部分

在扇形图的最外面的那一圈添加上特征名称得文本标注
label_radius = radii[-1] + 1.2    for i, feature_name in enumerate(df.index):        angle = theta[i]        rot = np.rad2deg(angle)        if angle > np.pi / 2:            rot -= 90        else:            rot -= 90

第七部分

在扇形图得侧面加上不同图形的标记,用来表示不同的目标变量,同时添加上这些形状的图例
target_markers = ['o', 's', '^', 'v', 'd', 'p', '*', 'h']    target_to_marker = {targets[i]: target_markers[i % len(target_markers)] for i in range(len(targets))}    side_angle = end_angle + 0.13    for i, target_name in enumerate(targets):        radius_for_marker = radii[i] + 0.45        marker_shape = target_to_marker[target_name]    target_legend_handles = []    for target_name, marker_shape in target_to_marker.items():        handle = Line2D([0], [0], marker=marker_shape, color='w', label=target_name, markerfacecolor='black', markersize=10, linestyle='None')        target_legend_handles.append(handle)

第八部分

添加颜色条

    ax.text(0.975, 0.68, '* p < 0.05', transform=ax.transAxes, fontsize=12, va='center', ha='left')    cax = fig.add_axes([0.2, 0.44, 0.6, 0.015])    sm = plt.cm.ScalarMappable(cmap=cmap, norm=plt.Normalize(vmin=-1, vmax=1))    cbar = fig.colorbar(sm, cax=cax, orientation='horizontal')    cbar_label = f"{method.capitalize()} coefficient"    cbar.set_label(cbar_label, size=12, labelpad=10)    cbar.ax.tick_params()

第九部分

绘图前的准备

包括数据读取、分析方法的选择、颜色选择、数据切分等,主要就是修改这里就行

if __name__ == "__main__":    # =========================================================================================    # ======================================4.分析绘图前准备=========================================    # =========================================================================================    selected_scheme = 1     correlation_method = 'pearson'    excel_input_path = fr"data.xlsx"    select_color = COLOR_THEMES.get(selected_scheme, 1)    data = pd.read_excel(excel_input_path)    features = data.columns[0:16].tolist()    targets = data.columns[16:].tolist()

第十部分

相关性分析与绘图
# =========================================================================================    # ======================================5.相关性分析+绘图=========================================    # =========================================================================================    correlation_results = {feature: [] for feature in features}    p_value_results = {feature: [] for feature in features}    for target_name in targets:        for feature_name in features:            correlation_results[feature_name].append(corr)            p_value_results[feature_name].append(p_value < 0.05)    df_corr = pd.DataFrame(correlation_results).T    df_corr.columns = targets    df_sig = pd.DataFrame(p_value_results).T    df_sig.columns = targets    create_correlation_circos(        df=df_corr,        df_sig=df_sig,        targets=targets,        color_palette=select_color,        method=correlation_method,        scheme_id=selected_scheme    )

如何应用?

1.选择配色方案:

selected_scheme = 1 

2.选择分析方法:

correlation_method = 'pearson'

3.选择使用的数据文件:

excel_input_path = fr"rget_data.xlsx"

4.拆分数据:

# 提取特征数据features = data.columns[0:16].tolist()# 提取目标数据targets = data.columns[16:].tolist()

推荐

期刊图片复现|python绘制六边形相关性矩阵图
告别传统热力图!Python绘制的带百分比填充扇形+数值标注结合的高级相关性分析矩阵图
期刊图片复现|Python绘制带有分组区域的环状相关性热图

获取方式

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

最新文章

随机文章