关于下面的代码,我可以生成一个堆叠的条形图,如第一张图所示。
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] 删除。
我来说两句