ggplot2用两个不同的变量填充两个

时间:2018-12-04 13:15:40

标签: r ggplot2 bar-chart

我想制作一个堆叠的条形图,其中每个“公司”都有一种颜色,每种运动都分为三种颜色。我尝试使用alpha,但无论如何我似乎都无法使用它,但是我宁愿使用颜色主题。 我已经提交了包含数据的代码,这些数据是我为实践“真实”数据所执行的步骤而编写的。如果您有关于如何简化此操作的建议,请不要犹豫。 先感谢您。

x1<-c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
x2<-c("Hej", "Hopp", "i Galopp", "Hopp", "i Galopp", "Hej", "i Galopp", "Hej", 
"Hopp", "Hej")
x3<-c(301, 5, 4, 26, 19, 82, 111, 41, 29, 12)
x4<-c(52, 43, 5, 23, 7, 88, 45, 2, 44, 56)
x5<-c(99, 4, 41, 77, 82, 71, 66, 203, 43, 40)
mydf<-data.frame(x1, x2, x3, x4, x5)
names(mydf)<-c("ID", "Company" , "Swim", "Bike", "Run")

mydf_prop<-prop.table(as.matrix(mydf[,3:5]),1)
mydf_prop<- mydf_prop %>% round(digits=2)
mydf_prop<-cbind.data.frame("Company"=mydf[,2], mydf_prop)
mydf_prop<-cbind.data.frame("ID"=mydf[,1], mydf_prop)
mydf_prop[,3:5]<-mydf_prop[,3:5]*100
mydf_prop<-mydf_prop %>% gather(`Swim`, `Bike`, `Run`, key = "Sport", 
                                value = "Sales in %") %>% arrange(`ID`)

mydf_prop %>% ggplot(aes(`ID`, `Sales in %`, fill=Company, alpha(Sport)))+
geom_col()+ geom_text(aes(`ID`, `Sales in %`, label=paste0(`Sales in %`, "%")), 
                    position = position_stack(vjust = 1), size =3)+
scale_alpha_manual(values=c(0.1, 0.5, 1)) +
scale_x_continuous(breaks = seq(0,10,1))+ coord_flip()

1 个答案:

答案 0 :(得分:0)

我不能完全确定“颜色分为三部分”的含义,但是对alpha的代码稍作更改就会产生以下结果。除非您想深入了解Sport调整色调的本质,否则这可能是最简单的方法。

mydf_prop %>% 
  ggplot(aes(`ID`, `Sales in %`, fill=Company, alpha = Sport))+
  geom_col()+ 
  geom_text(aes(`ID`, `Sales in %`, label=paste0(`Sales in %`, "%")), 
                        position = position_stack(vjust = 0.5), size = 3)+
  scale_x_continuous(breaks = seq(0,10,1))+ 
  scale_alpha_discrete(range = c(0.5, 1))+
  coord_flip()

enter image description here