当前位置:首页>python>期刊图片复现|Python绘制环形热图+韦恩图组合图

期刊图片复现|Python绘制环形热图+韦恩图组合图

  • 2026-09-02 15:36:59
期刊图片复现|Python绘制环形热图+韦恩图组合图

代码绘制成果展示

论文:Spatiotemporal modeling of molecular holograms
论文原图
此图详细展示了与三种形态学特征Curl、Acceleration和Divergence高度相关的morphogenic genes的表达模式。图表的正中心是一个韦恩图,直观地揭示了不同形态学特征相关的基因集大小及其重叠数量,其中白色虚线圆圈代表与Curl相关的基因,中间虚线圆圈代表与Acceleration相关的基因,蓝色虚线圆圈代表与Divergence相关的基因。在维恩图的外围是一圈环形热图,展示了这些特定的基因在Left ventricle、Right ventricle、Outflow tract、Right atrium和Left atrium中的表达情况。热图内侧的菱形点反映了这些基因的具体显著性水平。图表的最外围标注了具体的基因名称,图表左下角的图例揭示标记为红色的基因名称和字体加粗的基因名称被用来专门区分特定基因。
注意:此为个人理解,使用时还请阅读一下原文
仿图
多种配色

代码解释

第一部分

库的导入以及字体设置
# =========================================================================================# ====================================== 1. 环境设置 =======================================# =========================================================================================import numpy as npimport matplotlib.pyplot as pltfrom matplotlib.colors import LinearSegmentedColormapimport matplotlib.patches as patches

第二部分

设置颜色库
# =========================================================================================# ======================================2.颜色库=======================================# =========================================================================================COLOR_SCHEMES = {    1: {'white', 'seg_acc': '#D3A4A4', 'seg_div': '#8FAADC',        ['#003366', '#7F99B2', 'white', '#C57F7F', '#8B0000'],        ['#FF7F50', '#FFBFA7', 'white', '#96879E', '#2D103D']},}

第三部分

绘图函数:数据预处理与参数计算
# =========================================================================================# ======================================4.绘图函数=======================================# =========================================================================================def plot_advanced_forest_chart(df, scheme_id):    colors = COLOR_SCHEMES[scheme_id]  # 提取配色方案    sections = []  # 初始化图块数据列表    #获取热图结构的列名标签    fixed_columns = ['Section', 'Gene', 'Qval', 'Is_Bold', 'Is_Red']    struct_labels = [col for col in df.columns if col not in fixed_columns]    num_structs = len(struct_labels)  #判定热图层数    total_genes = sum(sec["count"] for sec in sections)  # 计算所有部分y总数    cmap_expr = LinearSegmentedColormap.from_list("expr_cmap", colors['expr_cmap'])  # 热图颜色映射    cmap_qval = LinearSegmentedColormap.from_list("qval_cmap", colors['qval_cmap'])  # q值颜色映射

第四部分

绘图函数:画布创建与基本参数设定
    # 创建画布    fig = plt.figure(figsize=(12, 12), facecolor='white')    # 主轴    ax = fig.add_axes([0.1,  # x                       0.1,  # y                       0.8,  # 宽度比例                       0.8],  # 高度比例                      polar=True)  # 极坐标    current_angle = np.pi / 2  # 初始角度    all_angles = []  # 保存每个x角度

第五部分

绘图函数:循环绘制热图
    # 遍历不同部分    for sec_idx, sec in enumerate(sections):        count = sec["count"]  # 获取此部分x数        sector_angle_span = available_angle * (count / total_genes)  # 弧度        # 生成各点角度        angles = np.linspace(current_angle,  # 起始角度                             current_angle + sector_angle_span,  # 结束角度                             count)  # 数量        all_angles.extend(angles)  # 保存        theta_mid = current_angle + sector_angle_span / 2  # 此部分热图中间角度        theta_mid_deg = np.degrees(theta_mid)  # 转为角度        if sec_idx < len(sections) - 1:            current_angle += sector_angle_span + gap_small  # 累加图块角度及小间隙        else:            current_angle += sector_angle_span + gap_large  # 累加图块角度及大间隙

第六部分

绘图函数:正北方文本标注绘制
   # 添加正北方文本    for row in range(num_structs):        ax.text(np.pi / 2 - 0.06,  # 角度                color='black')  # 颜色    # 显著性文本    ax.text(np.pi / 2 - 0.06, r_qval,  # 角度半径            color='black')  # 颜色

第七部分

绘图函数:手动绘制中心韦恩图
    # 韦恩图轴位置    ax_center = fig.add_axes([0.35, 0.35, 0.3, 0.3])    ax_center.axis('off')  # 去掉图框等    ax_center.set_xlim(0, 10)  # x轴范围    ax_center.set_ylim(0, 10)  # y轴范围    ax_center.set_aspect('equal')  # 等比例    # 绘制    ax_center.add_patch(c1_fill)    ax_center.add_patch(c2_fill)    ax_center.add_patch(c3_fill)    # 添加到图上    ax_center.add_patch(c1_edge)    ax_center.add_patch(c2_edge)    ax_center.add_patch(c3_edge)    ax_center.text(5,  # x                   2.0,  # y                   "Morphogenic\ngenes",  # 文本                   ha='center',  # 水平                   va='center',  # 垂直                   fontsize=16,  # 大小                   fontweight='bold')  # 加粗

第八部分

绘图函数:颜色条以及图例绘制
    # 热图颜色条    cbar_ax_expr = fig.add_axes([0.95,  # x                                 0.65,  # y                                 0.016,  # 宽                                 0.18])  # 高    #获取实际数据的以映射颜色条的极限值    expr_min = df[struct_labels].min().min()#极小    expr_max = df[struct_labels].max().max()#极大    norm_expr = plt.Normalize(vmin=expr_min, vmax=expr_max)#范围    cbar_expr = fig.colorbar(plt.cm.ScalarMappable(norm=norm_expr, cmap=cmap_expr), cax=cbar_ax_expr)  # 生成颜色条    cbar_qval.ax.yaxis.set_major_locator(ticker.MaxNLocator(5))    #刻度线    cbar_qval.ax.tick_params(length=0, width=0, labelsize=12)

第九部分

执行部分
# =========================================================================================# ======================================2.颜色库=======================================# =========================================================================================if __name__ == "__main__":    df_real = pd.read_excel(r'data.xlsx')  #读取数据        scheme_id = 1        print('正在绘制并保存方案:', scheme_id)        selected_hex_colors = COLOR_SCHEMES[scheme_id]        plot_advanced_forest_chart(df_real, scheme_id)

如何应用到你自己的数据

1.设置原始数据的保存路径,执行部分:

df_real = pd.read_excel(r'\data.xlsx')  #读取数据

2.设置是否批量绘图,执行部分:

plot_all = True  # 是否批量绘图

3.定义要读取和标注在正北方的y名称,绘图函数部分:

fixed_columns = ['Section', 'Gene', 'Qval', 'Is_Bold', 'Is_Red']

4.定义部分名称,绘图函数部分:

sec_names = df['Section'].unique().tolist()

5.定义要用到的其他数据名,绘图函数部分:

sections.append({    "name": sec_name,  # 部分名称    "count": len(df_sec),  # 对应数据行数    "color": sec_col,  # 颜色    "edge": "black",  # 边缘颜色    "genes": df_sec['Gene'].tolist(),  #提取并保存x列表    "qvals": df_sec['Qval'].values,  #提取并保存q值数组    "expr_data": [df_sec[struct_labels[i]].values for i in range(num_structs)],  #提取并保存y数据矩阵    "is_bold": df_sec['Is_Bold'].tolist(),  # 是否加粗标志    "is_red": df_sec['Is_Red'].tolist()  # 是否标红标志})

6.定义韦恩图的大小位置,我手动绘制的因为画出来效果比较好看这块需要改的多,绘图函数部分:

r1, r2, r3 = 1.6, 1.4, 2.0  # 圆半径cx1, cx2, cx3 = 2.8, 5.0, 7.5  # 圆心x坐标

7.定义韦恩图的文本部分,绘图函数部分:

ax_center.text(4.0, 5, '1', ha='center', va='center', fontsize=11)

8.设置绘图结果的保存地址,绘图函数部分:

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

推荐

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

获取方式

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

最新文章

随机文章