在ggplot2函数内部执行转换以产生负值

罗勒

关于下面的代码,我可以生成一个堆叠的条形图,如第一张图所示。

 library(ggplot2)
 vehicle<- sample(rep(c("Cars","Cycles","Motobike"),times=c(20,50,30)))
 team<-sample(rep(c("TeamA","TeamB"),times=c(50,50)))

 df<-data.frame(team,vehicle, stringsAsFactors = FALSE)

 ggplot(data = df, aes(x = as.factor (vehicle), fill =team)) +
 geom_bar(mapping = aes(y = stat(count)/sum(..count..)*100),
       position = "stack")

在此处输入图片说明

我想做的是在geom_bar(mapping = aes(y = stat(count)/sum(..count..)*100),position = "stack")零件中产生一个转换,说如果是团队B,则计数变为减号。我想这样做,以便可以重现第二张图。

在此处输入图片说明

任何人都可以帮助修改代码以获得所需的结果吗?

注意:第二个图形是使用下面的代码创建的,但是我不想添加两个单独的geom_bars,因为这意味着%在y轴上不正确。

 ggplot(data = df, aes(x = as.factor (vehicle), fill =team)) +
 geom_bar(data = subset(df, team=="TeamA"),
     mapping = aes(y = stat(count)/sum(..count..)*100),
     position = "stack")+
 geom_bar(data = subset(df, team=="TeamB"),
       mapping = aes(y = - stat(count)/sum(..count..)*100),
       position = "stack") +
  labs(x = "", y="")
罗勒

我设法直接在实现我所追求的功能的函数中使用ifelse来做到这一点。

 set.seed (105)
 vehicle<- sample(rep(c("Cars","Cycles","Motorbike"),times=c(20,50,30)))
 team<-sample(rep(c("TeamA","TeamB"),times=c(50,50)))

 df<-data.frame(team,vehicle, stringsAsFactors = FALSE)

 ggplot(data = df, aes(x = as.factor (vehicle), fill =team,
                  y= ifelse(test = team == "TeamB",
                            yes = -1/nrow(df)*100, no = 1/nrow(df)*100)))+
            geom_bar(stat="identity")

在此处输入图片说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章