有条件的彩色条形图

时间:2020-04-30 15:39:38

标签: r ggplot2 bar-chart colorbar

我想有条件地为这些镜子的条形图着色。

我想根据疾病和医院上色。我希望具有前两个相同字符的疾病具有相同的颜色(即D4001和D4002将具有相同的颜色; D3000,D3001和D3003将具有相同的颜色)。

我还想对医院的颜色进行分层,以使同一疾病的一家医院之间的透明度或对比度会有所不同(例如,医院A中的疾病D4将为红色,疾病D4在医院B中将是透明的红色)。

set.seed(0)
ID=1:20
Hospital<-sample(c(rep("A",10),rep("B",10)))
Disease<-c("D1000",rep("D2001",2),rep("D2000",3),rep("D3000",4),
rep("D3001",2),rep("D3003",4),rep("D4001",3),"D4002")

data$Disease<-as.factor(data$Disease)
data<-data.frame(ID,Hospital,Disease)
datacount<-data%>%group_by(Hospital,Disease)%>%count
datacount$n2<-ifelse(datacount$Hospital=="B",datacount$n,-datacount$n)

ggplot(datacount,aes(x=Disease,y=n2))+
  geom_col(aes(fill=Hospital))+coord_flip()

我所能做的就是按医院或按疾病单独着色。

enter image description here enter image description here

1 个答案:

答案 0 :(得分:1)

您可以添加Alpha来定义医院。 (very similar thread here)。使用子字符串来治疗疾病的功劳归功于user Dave2e

ggplot(datacount,aes(x=Disease, y=n2)) + 
  geom_col(aes(fill=substr(Disease, 1,2))) +
  scale_fill_discrete(name="Disease") +
    geom_col(aes(alpha=Hospital), fill = "grey") + 
  scale_alpha_manual(values = c(0.1,0.5)) +
  coord_flip() 

reprex package(v0.3.0)于2020-04-30创建