如何使用ggvenn为维恩图的每个圆圈添加上标?

问题描述 投票:0回答:1

我正在尝试向一个维恩图的每个圆圈添加上标。我正在使用 R 包

ggvenn
,这些都是我的尝试。

#Normal situation
set.seed(20190708)
genes <- paste("gene",1:1000,sep="")
x <- list(
  A_vs_X = sample(genes,300), 
  B_vs_P = sample(genes,525)
)
ggvenn::ggvenn(x)

输出:

但是,我想生成这样的东西:

我知道为了获得每个下标,我需要这样做:

expression('A'^(tt/tx))
expression('X'^(tw/ga))
expression('B'^(tt/tx))
expression('P'^(tw/ga))

虽然由于某种原因如果我想粘贴两个,但它不起作用(我不知道为什么)

paste0(expression('A'^(tt/tx)), expression('X'^(tw/ga)))

无论如何,我已经用

ggvenn
尝试了以下操作,但结果不是我所期望的(它出现“title1”和“title2”而不是我创建的下标:

A <- expression('A'^(tt/tx))
X <- expression('X'^(tw/ga))
title1 <- paste0(A, " vs ", X)

B <- expression('B'^(tt/tx))
P <- expression('P'^(tw/ga))
title2<- paste0(B, " vs ", P)
x <- list(
  title1 = sample(genes,300), 
  title2 = sample(genes,525)
)
ggvenn::ggvenn(x)

我也尝试过这个,但出现以下错误:

x <- list(
  expression("A"^(tt/tx) "vs X"^(tw/ga)) = sample(genes,300), 
  expression("B"^(tt/tx) "vs P"^(tw/ga)) = sample(genes,525)
)
Error: unexpected string constant in:
"x <- list(
  expression("A"^(tt/tx) "vs X""

有谁知道怎么做吗?

提前致谢

r superscript venn-diagram ggvenn
1个回答
0
投票

一个黑客选项是使用

?plotmath
字符串并操作
ggplot
返回的
ggvenn
对象,即在
parse=TRUE
层中设置
geom_text
,该层在底层用于添加“标题”对于您的示例数据是
ggplot
对象的第三层。另外,我已将垂直对齐设置为 0.5。

# Normal situation
set.seed(20190708)
genes <- paste("gene", 1:1000, sep = "")
x <- list(
  "A^{(tt/tx)}~vs~X^{(tw/ga)}" = sample(genes, 300),
  "B^{(tt/tx)}~vs~P^{(tw/ga)}" = sample(genes, 525)
)
p <- ggvenn::ggvenn(x)

p$layers[[3]]$aes_params$vjust <- .5
p$layers[[3]]$geom_params$parse <- TRUE

p

© www.soinside.com 2019 - 2024. All rights reserved.