
代码绘制成果展示




代码解释


第一部分

# =========================================================================================# ====================================== 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 = 150total_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_featureswidth = single_bar_span * 0.95radii = np.arange(5, 5 + len(targets))if isinstance(heatmap_colors_value, str):cmap = plt.get_cmap(heatmap_colors_value)else:colors = heatmap_colors_valuenodes = [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.45sig_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.2for i, feature_name in enumerate(df.index):angle = theta[i]rot = np.rad2deg(angle)if angle > np.pi / 2:rot -= 90else: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.13for i, target_name in enumerate(targets):radius_for_marker = radii[i] + 0.45marker_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 = 1correlation_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).Tdf_corr.columns = targetsdf_sig = pd.DataFrame(p_value_results).Tdf_sig.columns = targetscreate_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()

推荐


获取方式
