首页 > 解决方案 > 在函数中按组将文本添加到 ggplot 条形图

问题描述

给定这样的数据集:

XX<-as.factor(c('P','P','P','R','R','R','F','F','F'))
YY<-c(2,3,6,3,5,3,2,3,4)
Facto<-c("A","B","C","A","B","C","A","B","C")
Text<-c("Z","Z","F","Z","H","Z","Z",'Z',"M")
MyData<-data.frame(XX,YY,Facto,Text)
rm(Facto)

我的目标是有一个函数来创建一个条形图,每个条形上方都有文本

MyBarPlot<-function(Data, ColName){
  dodger = position_dodge(width = 0.9)
  ggplot(Data, aes(x=XX, y=YY, fill=Facto))+
    geom_bar(stat="identity", color="black",position=position_dodge())+
    scale_fill_viridis(discrete = TRUE,option = "D",name=)+
    geom_text(aes(label=Text, group = ColName), position = dodger, col='red')+
    theme_minimal()
  
  
}

当我运行上述函数时,“fill=”参数工作得很好,但 geom_text 的“group by”方面却不行。

MyBarPlot(MyData,'Facto')

如果我像这样更改函数中的“group=”行:

MyBarPlot<-function(Data, ColName){
      dodger = position_dodge(width = 0.9)
      ggplot(Data, aes(x=XX, y=YY, fill=Facto))+
        geom_bar(stat="identity", color="black",position=position_dodge())+
        scale_fill_viridis(discrete = TRUE,option = "D",name=)+
        geom_text(aes(label=Text, group = Facto), position = dodger, col='red')+
        theme_minimal()
      
      
    }

我得到了我想要的,但是我失去了在我的函数中分配这个变量的能力。有没有办法我可以在我的函数调用中动态分配“group=”,就像我对“fill=”参数所做的那样?

标签: rggplot2

解决方案


这是做你想做的吗?

MyBarPlot<-function(Data, ColName){
  dodger = position_dodge(width = 0.9)
  ggplot(Data, aes(x=XX, y=YY, fill= {{ColName}}))+
    geom_bar(stat="identity", color="black",position=position_dodge())+
    viridis::scale_fill_viridis(discrete = TRUE,option = "D",name=)+
    geom_text(aes(label=Text), position = dodger, col='red')+
    theme_minimal()
}


MyBarPlot(MyData,Facto)

在此处输入图像描述


推荐阅读