R ggplot2:基于条件/数值阈值的颜色分组条形图

时间:2016-08-04 20:43:17

标签: r ggplot2

对于我使用ggplot2生成的分组条形图,我有以下输入:

Disease;Category;Value;pValue
Disease A;Count;100;0.0001
Disease A;Expected Count;50;0.0001
Disease B;Count;80;0.0005
Disease B;Expected Count;40;0.0005
Disease C;Count;60;0.0010
Disease C;Expected Count;40;0.0010
Disease D;Count;45;0.05
Disease D;Expected Count;50;0.05

以下代码生成分组的条形图:

literature.disease2 <- read.table(file = "/user/literature-disease2.csv",sep=";", header=TRUE)
literature.disease2.sorted <- literature.disease2[order(literature.disease2$pValue,literature.disease2$Category),]
ggplot(data=literature.disease2.sorted, aes(x=Disease, y=Value, fill=Category)) +
geom_bar(stat="identity", position=position_dodge(),size=.3, colour="black") +
  scale_fill_manual(values=c("Count" = "lightblue", "Expected Count" = "pink")) + # Change color
  xlab("Disease Category") + ylab("Literature Count") + # Set axis labels
  ggtitle("Genome-Wide Literature Counts") +     # Set title
  theme_bw() +
  theme(axis.text.x = element_text(angle =90, hjust = 1,vjust=0.5)) 

这是情节: enter image description here

现在,当pValue <= 0.005时,我想用蓝色(而不是浅蓝色)和紫色(而不是粉红色)的颜色条。我知道我必须更改 scale_fill_manual 选项,但我不知道如何为分组条形图执行此操作。任何人都可以帮忙吗?

先谢谢,弗兰克

1 个答案:

答案 0 :(得分:1)

这段代码可能会让你开始,但考虑增加重要性,例如alpha美学而不是双重编码。

关键是使用interaction()作为fill美学并适当地映射颜色。

library(ggplot2)
literature.disease2 <- read.table(text = "Disease;Category;Value;pValue
Disease A;Count;100;0.0001
Disease A;Expected Count;50;0.0001
Disease B;Count;80;0.0005
Disease B;Expected Count;40;0.0005
Disease C;Count;60;0.0010
Disease C;Expected Count;40;0.0010
Disease D;Count;45;0.05
Disease D;Expected Count;50;0.05",sep=";", header=TRUE)
literature.disease2.sorted <- literature.disease2[order(literature.disease2$pValue,literature.disease2$Category),]
ggplot(data=literature.disease2.sorted, aes(x=Disease, y=Value, fill=interaction(Category, pValue <= .005))) +
  geom_bar(stat="identity", position=position_dodge(),size=.3, colour="black") +
  scale_fill_manual(values=c("Count.FALSE" = "lightblue", "Count.TRUE" = "blue", "Expected Count.FALSE" = "pink", "Expected Count.TRUE" = "purple")) + # Change color
  xlab("Disease Category") + ylab("Literature Count") + # Set axis labels
  ggtitle("Genome-Wide Literature Counts") +     # Set title
  theme_bw() +
  theme(axis.text.x = element_text(angle =90, hjust = 1,vjust=0.5)) 

以下是我的建议情节:

ggplot(data=literature.disease2.sorted, aes(x=Disease, y=Value, fill=Category, alpha = pValue <= .005)) +
  geom_bar(stat="identity", position=position_dodge(),size=.3, colour="black") +
  scale_fill_manual(values=c("Count" = "blue", "Expected Count" = "purple")) + # Change color
  scale_alpha_discrete(range = c(0.5, 1)) + # Make the "insignificant" bars a little more visible (default range = c(0.1,1))
  xlab("Disease Category") + ylab("Literature Count") + # Set axis labels
  ggtitle("Genome-Wide Literature Counts") +     # Set title
  theme_bw() +
  theme(axis.text.x = element_text(angle =90, hjust = 1,vjust=0.5))