R|ggsegExtra绘制Desterieux统计结果

3a8fb0ffcdbdfb7489079889addefb9b.png

ggseg默认绘制的是基于Desikan模板的结果,ggsegExtra进一步将绘图功能拓展到了20多个(包括常见的power, Gordon, Desterieux, Schaefer, Glasser, Yeo2011)。作者还提供了如何自制模板的教程,看起来也不复杂。

详情见https://ggseg.github.io/ggsegExtra/

c2c1e4fdefa8241c01181c4f4de1d957.png

👉安装工具包

方法1添加他们创建的universe.dev,安装ggsegExtra

options(repos = c(
  ggseg = 'https://ggseg.r-universe.dev',
  CRAN = 'https://cloud.r-project.org'))
# Install some packages
install.packages('ggsegExtra')

方法2 通过github安装 (未成功)

# install.packages("remotes")
remotes::install_github("ggseg/ggsegExtra")

运行ggseg_atlas_repos(),出现各模板信息说明安装成功。

library(ggsegExtra)
ggseg_atlas_repos()

edf1366a4cfc19dee566a9101fff0d25.png

查看版本为1.5.33,若为1.5版本说明安装的是旧版的ggsegExtra,运行ggseg_atlas_repos()会报错无此函数。

ceacc250474f12c50047e26540cda374.png

👉安装模板

install_ggseg_atlas('ggsegDesterieux')

这里以Desterieux模板为例,其他模板的操作方法类似。如果不知道需要具体安装的名称,可以使用ggseg_atlas_repos()快速检索模板的信息,然后安装,比如搜索yeo,获取记录并找到对应的名称。

repo=ggseg_atlas_repos("yeo", ignore.case = TRUE)
install_ggseg_atlas(repo$Package)


> repo$Package
[1] "ggsegYeo2011"

安装好的ggsegDesterieux有两个内容,包括2d和3d的作图信息。

ggsegDesterieux::desterieux
ggsegDesterieux::desterieux_3d

cfe0a7932ba8a1162d6b9c8329c8af69.png

👉作图一

和ggseg没太大区别,就是从DK换成其他的模板而已。

可用参考之前的推送

R| ggseg 绘制统计结果

生成数据并作图

ats_info=desterieux
someData = tibble(
  label = ats_info$data$label,
  p = sample(seq(0,.5,.001), length(ats_info$data$label))
) %>% 
  brain_join(desterieux) %>% 
  reposition_brain(hemi ~ side) %>% 
  ggplot() + 
  geom_sf(aes(fill = p))

6538fd408778a20a6426507e1aa40cce.png

hmm🤔,区域之间并不是如Desikan那样完美衔接的,有点差强人意啊。。这可能和制作模型的过程中某几项参数和人工干预有关。测试一些其他模板-Yeo17,也有类似问题。

library(ggsegYeo2011)
ats_info=yeo17
someData = tibble(
  label = ats_info$data$label,
  p = sample(seq(0,.5,.001), length(ats_info$data$label))
)
someData %>% 
  brain_join(yeo17) %>% 
  reposition_brain(hemi ~ side) %>% 
  ggplot() + 
  geom_sf(aes(fill = p))

9955a857a1b5408ff3cdc9cbd45e850e.png

有人就用它绘制了文章用图,就是图B那颜色有点戳眼睛。

7a8f2de0a48557d58b517a13830314ca.png

其实把多数区域配成白色或者不放大都还过得去

e3e75056159d0fa18076fb4d34a10954.png

👉作图二

另外还可以让三弟制图。ggseg3d基于plotly,唯一的不足就是速度很慢,并且一次似乎只能绘制一个半球的数据,还需要额外的工作保存截图和拼图。

注意此处数据结果和2d绘图数据的结构略微不同
someData = desterieux_3d %>% 
  filter(surf == "inflated" & hemi == "right") %>% 
  tidyr::unnest(ggseg_3d) %>% 
  ungroup() %>% 
  select(region) %>% 
  na.omit() %>% 
  mutate(p = sample(seq(0,.5, length.out = 1000 ), nrow(.)) %>% 
           round(2)) 


ggseg3d(.data = someData, 
        atlas = desterieux_3d,
        colour = "p", text = "p") %>% 
        remove_axes() %>% #去网格
        pan_camera("right medial")

caaec164241e471bb9b8fcbff20f287e.png

可以手动将plotly的对象保存到本地,但批量操作时还是写代码比较方便。

先用export报错,让用orca

b0d966ce695e083541de857403191fd5.png

orac又说让用kaleido

f07f5f020b5e728892f46c0e6157566c.png

结果还需要用python安装kaleido,结果还是莫名失败。

4a37bf26930331a63f490ef6ab57fdd4.png

用plotly_IMAGE还要申请他们的api_key...

e1cb85411b9068b32859df0de8731805.png

最后用save_image完成

save_image(p, file = sprintf('%s/test.png',dir2save))

2a97b9ceb905e241cdbe9a85ecd7d3e4.png

同样需要安装python版本的plotly才行,最终保存成功👇

23555c80a72e2a5c53c150dfd09886ee.png

但想在R中拼出ggseg(2d)那样的效果就有点麻烦了。一个肯定可行的思路是:用pan_camera()切换角度,分别保存到本地,用R或者PS裁剪之后拼接。

pan_camera()支持四个角度,也可以自定义角度,同样需要花时间摸索。

e23e7d5ce33cacacea9951d7623636ac.png

👉其他工具

ggseg3d原理应该是先做重采样,之后用plotly作图。其实可以手动将模板的数据重采样到vertex水平,此时可选择的软件和工具就很多了,比如R的fsbrain, Matlab的surfstat等。另外,发现Matlab的freesurfer_statsurf_display有看起来有不错的Destrieux模型,DK模板好像还能加带箭头的标签。

690388c1c28d71decc57f5cfca6c4b8a.png

没有乱七八糟的dependency,工具包加入路径即可用,可自定义colorbar颜色,但仍需手动修改成图效果,比如改背景色,去除不想要的标签,调整两列之间的距离等。用PS或者改底层代码都能实现。

0c920b18a0048f83715d63e4b14c95cb.png

06518fdaecf490eab0ce41ba40161f5d.png

a24cf9fe030f0d18c771ea6879dff223.png

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值