我正在尝试向一个维恩图的每个圆圈添加上标。我正在使用 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""
有谁知道怎么做吗?
提前致谢
一个黑客选项是使用
?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