在geom_text()中使用斜体,在R中使用ggplot2变量

5ssjco0h  于 2023-05-11  发布在  其他
关注(0)|答案(1)|浏览(111)

我在使用geom_text()和annotate()时遇到了一些问题。首先,我想在图中显示点图/条形图的观察数。我现在已经通过存储数字的 Dataframe 中的附加向量笨拙地解决了这个问题。

library(dplyr)
library(ggplot2)  
v1 <- c(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2)
v2 <- c(0,0,0,0,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2)
v3 <- c(13,67,89,280,40,1,23,99,32,1,75,280,270,200,196,450,320,277,23,4,1,2,5,89,45,23,11,1,3,23,100,100,100,100,100,200,100,11,6,6,123,100,100,100,100,100,12,86,11,390,75,100,110,19,299,100,100,100,100,100,100,100,100,11,100,120,110,100,100,423,100,279,100,100,100,12,100,100,75,5,10,10,10,10,10)
v4 <- c(4,NA,NA,NA,5,NA,NA,NA,NA,NA,9,NA,NA,NA,NA,NA,NA,NA,NA,10,NA,NA,NA,NA,NA,NA,NA,NA,NA,22,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,34,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA)

summary <- data.frame(v1, v2, v3, v4)
summary$v1 <- as.factor(summary$v1)
summary$v2 <- as.factor(summary$v2)

ggplot(summary, aes(x = v1, y = v3, fill = v2)) + 
    geom_dotplot(binaxis  = "y", stackdir = "center", binwidth = 5, position = position_dodge(0.75), dotsize = 1) +
    geom_text(aes(label = ifelse(v4>0, v4, NULL), y=500), position=position_dodge(width=0.75), vjust=-0.25, hjust=0)

现在我有一个问题:
我想在观察次数(v4)前插入一个斜体的“n”。我也在这方面做了很多研究。我找到的一个解决方案是substitute(paste0(italic('n='), summary$v4)),但在这里我得到了以下错误:Error in rep(yes, length.out = len) : attempt to replicate an object of type 'language'.
如果我使用以下代码:expression(paste0(italic('n='), summary$v4))“n=”以斜体显示,但变量被视为文本,并且不显示变量的内容。
here an example image
可能也有一个自动解决方案,如何自动计算观察的数量。在这里,我也会很高兴得到改进和帮助。

uidvcgyl

uidvcgyl1#

您可以在geom_text中使用parse = TRUE

ggplot(summary, aes(x = v1, y = v3, fill = v2)) + 
  geom_dotplot(binaxis  = "y", stackdir = "center", binwidth = 5, 
               position = position_dodge(0.75), dotsize = 1) +
  geom_text(aes(label = ifelse(!is.na(v4), paste0('italic(n) == ', v4), ''), 
                y = 500), vjust = -0.25, hjust = 0, parse = TRUE,
            position = position_dodge(width = 0.75))

相关问题