如何基于Nilearn绘制绘制脑网络图(一)?绘制功能连接、结构连接可视化

本文介绍了如何使用Python库Nilearn进行脑网络图的绘制,包括功能连接和结构连接的可视化。Nilearn提供了plot_connectome()函数,需要adjacency_matrix和node_coords作为输入,用于表示节点间的连接强度和位置。示例代码展示了如何生成脑网络图,并且可以仅显示节点并用不同颜色区分。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

结果图

在这里插入图片描述

Nilearn

Nilearn是一个Python库,用于神经影像分析。它提供了处理和分析功能性和结构性脑成像数据的工具。Nilearn提供了多种预处理函数、机器学习算法应用、统计分析和结果可视化的功能。在神经影像研究领域,Nilearn常用于分析功能性磁共振成像(fMRI)等技术的数据。通过Nilearn,研究人员可以对大脑活动进行定量分析、图像处理和模式识别,帮助推动神经科学研究的发展。

Nilearn 可视化

Nilearn 的plotting模块提供了体素空间和皮层的绘图方法,可以绘制结构像、时间序列、神经影像结果的可视化比如ROI绘制、分区图绘制、脑网络图绘制、检验结果绘制等神经影像研究中常用的各种类型的图片。

如何绘制脑连接图

脑连接图的绘制基于nilearn中的plotting.plot_connectome()函数,下面主要介绍一下该函数的参数,方便使用时根据需要定制。

使用该函数绘制脑连接图主要需要提供两个数据,需要使用者导入:

  • 第一个adjacency_matrix:是一个N*N的矩阵,该矩阵如果是对阵的则为无向图,若为非对阵的则为有向图,矩阵中的值用来标识节点之间的连接强度。比如:
ACDE
A12345
B21789
C3711112
D4811114
E5912141
  • 第二个node_coords:是一个N*3矩阵,每一行表示网络中节点的MNI坐标。两个参数中的N值相同都表示矩阵中节点的数目。
节点XYZ
1-30-1020
210045
3-1525-5
440-530
5-5-4015
  • 其他参数说明(部分)
node_color(颜色或颜色序列或'auto',可选):节点的颜色。如果给定单一字符串,则所有节点都将以该字符串中的相同颜色绘制,比如'#1a2b3c'。

node_size(标量或数组样式,可选):节点的大小(以点为单位)。

edge_cmap(色图,可选):用于表示边缘强度的色图。默认为cm.bwr。

edge_vmin、edge_vmax(浮点数,可选):如果不为None,则这些值将用作边缘的最小值和最大值进行着色。如果未提供,则将在给定阈值内使用最大绝对值作为最小值(乘以-1)和最大值进行着色。

edge_threshold(字符串或数字,可选):如果它是一个数字,则只显示值大于edge_threshold的边。如果它是一个字符串,它必须以百分号结尾,例如"25.3%",则只显示绝对值超过给定百分位的边。

output_file(字符串或None,可选):要导出绘图的图像文件的名称。有效的扩展名为.png、.pdf、.svg。如果output_file不为None,则将绘图保存到文件,并关闭显示。

display_mode(字符串,可选):选择切片的方向:'' - 状面,'y' - 冠状面,'z' - 轴向,'l' - 仅左半球矢状面,'r' - 仅右半球矢状面,'ortho' - 在正交方向上进行三个切片。可能的取值为:'ortho''x''y''z''xz''yx''yz''l''r''lr''lzr''lyr''lzry''lyrz'。默认为'ortho'。

figure(整数或matplotlib.figure.Figure或None,可选):要使用的Matplotlib图形或其编号。如果给定None,则创建一个新的图形。

axes(matplotlib.axes.Axes或4个浮点数的元组(xmin、ymin、width、height),可选):用于显示绘图的Axes或坐标,在matplotlib图形空间中。如果为None,则使用完整的图形。

title(字符串或None,可选):在图形上显示的标题。默认为None。

annotate(布尔值,可选):如果annotate为True,则添加位置和左/右注释到绘图中。默认为True。

black_bg(布尔值或'auto',可选):如果为True,则将图像的背景设置为黑色。如果希望保存具有黑色背景的图形,需要将facecolor='k'、edgecolor='k'传递给matplotlib.pyplot.savefig。默认为False。

alpha(01之间的浮点数,可选):脑模型透明度。默认为0.7。

colorbar(布尔值,可选):如果为True,则在绘图右侧显示一个颜色条。默认为False

完整Demo 绘制脑网络

# -*- coding: utf-8 -*-
"""
Created on Mon Jun 26 21:53:19 2023

@author: LB
"""

###  完整Demo
from nilearn import plotting
# import scipy.io as scio
import pylab as pl
# import numpy as np

def main():
    # data_path = "~\\node_distribution_TLE.mat"   # 输入网络文件的地址
    # data_org = scio.loadmat(data_path)
    
    strength = [1,2,3,4,5]                             # 网络节点强度(n*1)
    strength_list = [100 * i for i in strength]        # 可以根据节点的值控制节点的大小
    data_position = [[-30,-10,20],
                     [10,0,45],
                     [-15,25,-5],
                     [40,-5,30],
                     [-5,-40,15]]                    # 存放节点的MNI坐标(n*3
    data_mat = [[1,-2,3.5,1.1,-2],
                [-2,1,7,-3.5,0.8],
                [3.5,7,1,6.6,0.6],
                [1.1,-3.5,6.6,1,3.5],
                [-2,0.8,0.6,3.5,1]]
    # data_mat = np.zeros((len(data_position), len(data_position)))   # 图个只想显示节点,可以产生了一个0矩阵
    #colors = ['#B9A3AE', '#D2CCC5', '#C0BEC7', '#B0A4C2', '#D3C0BB', '#BFA58A', '#D9C6B0', '#E8DBC5', '#E6D4D1', '#E0BBE4']
    # node_color_list =  ['#B9A3AE', '#D2CCC5', '#BFA58A', '#D9C6B0', '#E8DBC5'] # 节点的颜色值(n*1 放置 )
    node_color_list = '#00CCCC'
    figure1 = pl.figure(figsize=(12, 6))
    plotting.plot_connectome(data_mat, 
    data_position, 
    node_color_list, 
    colorbar=True, 
    edge_cmap='rainbow',          # 用来显示边的强度
    edge_threshold=0.0, 
    node_size=strength_list, 
    # edge_vmin=2, 
    # edge_vmax=3, 
    alpha=0.7,
    figure=figure1
    )
    pl.savefig('.\\test.png', dpi=600)    # 输出文件的地址
    plotting.show()
    print('ending')
    
if __name__ == '__main__':
    main()


  • 结果图
    在这里插入图片描述

完整Demo 如果只显示节点,且每个节点显示不一样的颜色

# -*- coding: utf-8 -*-
"""
Created on Mon Jun 26 21:53:19 2023

@author: LB
"""


from nilearn import plotting
# import scipy.io as scio
import pylab as pl
import numpy as np



def main():
    # data_path = "~\\node_distribution_TLE.mat"   # 输入网络文件的地址
    # data_org = scio.loadmat(data_path)
    
    strength = [1,2,3,4,5]                             # 网络节点强度(n*1)
    strength_list = [100 * i for i in strength]        # 可以根据节点的值控制节点的大小
    data_position = [[-30,-10,20],
                     [10,0,45],
                     [-15,25,-5],
                     [40,-5,30],
                     [-5,-40,15]]                    # 存放节点的MNI坐标(n*3
    # data_mat = [[1,-2,3.5,1.1,-2],
    #             [-2,1,7,-3.5,0.8],
    #             [3.5,7,1,6.6,0.6],
    #             [1.1,-3.5,6.6,1,3.5],
    #             [-2,0.8,0.6,3.5,1]]
    data_mat = np.zeros((len(data_position), len(data_position)))   # 图个只想显示节点,可以产生了一个0矩阵
    #colors = ['#B9A3AE', '#D2CCC5', '#C0BEC7', '#B0A4C2', '#D3C0BB', '#BFA58A', '#D9C6B0', '#E8DBC5', '#E6D4D1', '#E0BBE4']
    node_color_list =  ['#1967db', '#1c61e6', '#4c27ba', '#dd0922', '#e40a1e'] # 节点的颜色值(n*1 放置 )

    # node_color_list = '#00CCCC'
    figure1 = pl.figure(figsize=(12, 6))
    plotting.plot_connectome(data_mat, 
    data_position, 
    node_color_list, 
    colorbar=False, 
    edge_cmap='rainbow',          # 选择colormap用来显示边的强度
    edge_threshold=0.0, 
    node_size=strength_list, 
    # edge_vmin=2, 
    # edge_vmax=3, 
    alpha=0.7,
    figure=figure1
    )
    pl.savefig('.\\test2.png', dpi=600)    # 输出文件的地址
    plotting.show()
    print('ending')
    
if __name__ == '__main__':
    main()

在这里插入图片描述

说明

具体使用时,只需要导入自己的网络连接数据,如功能连接矩阵、结构连接矩阵赋值连接矩阵;导入节点的MNI坐标赋值给节点即可生成对应。如果只显示节点,就对应生成一个矩阵,矩阵的边为0即可。使用我给出的默认参数即可,具体其它的参数可以继续尝试。

### 使用EEGLAB绘制连接图 为了使用EEGLAB绘制连接图,需遵循特定的操作流程来准备数据和配置环境。完成基础设置之后,在`pop_chanedit.m`窗口中调整参数以优化图形展示效果[^2]。 #### 准备工作 在开始绘制之前,应参照EEGLAB教程中的指导完成必要的预处理步骤。这通常涉及加载数据集以及执行初步的数据清理与转换操作。对于通道光谱图的准备工作,只需依照指南操作至指定阶段并确认选项即可[^1]。 #### 配置绘图参数 进入绘图配置环节时,推荐保持默认设定不变,除非有特殊需求。特别是关于“Plot radius”的数值选择上,默认值0.5适用于大多数场景下的头皮图绘制;而设为1.0则会扩展显示范围,包括更多潜在的位置信息。这设置直接影响最终呈现的地图细节程度及其解释的有效性。 #### 执行连接绘制 具体到功能连接头皮关系图的实现,则依赖于专门设计的功能模块——如FCLab所提供的接口。通过定义结构体变量`displayStruct.chanPairs`来指明参与分析的通道组合,并调用相应的绘图函数`topoplot_connect()`完成可视化过程。以下是简化版代码片段: ```matlab % 定义通道配对矩阵 displayStruct.chanPairs = combntns([1:1:11], 2); % 调用顶图连线绘制函数 topoplot_connect(displayStruct, EEG.chanlocs, fcdata); ``` 这段脚本实现了基于给定条件的选择性通道间关联性的直观表达,其中包含了电极位置(`chanlocs`)及实际测量得到的功能连接强度数据(`fcdata`)作为输入参数传递给绘图引擎[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张小李的风

谢谢老板!!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值