使用facet_wrap()在ggplot2直方图中的等宽条宽度

时间:2016-11-17 08:01:51

标签: r ggplot2

我的数据与下面的示例数据类似,我试图绘制基因型列上刻面的测量列的直方图。最终,我希望条形图的颜色以Genotype和Condition列为条件。

至关重要的基因型B个体从未在条件L下进行测量。

这就是数据的样子:

library(ggplot2)
library(dplyr)

set.seed(123)
DF <- data.frame(Genotype = rep(c("A", "B"), 500), 
                 Condition = sample(c("E", "L"), 1000, replace = T),
                 Measurment = round(rnorm(500,10,3), 0))

DF <- anti_join(DF, filter(DF, Genotype == "B" & Condition != "E"))'

head(DF)

  Genotype Condition Measurment
1        A         L         18
2        A         L          2
3        B         E         18
4        B         E         18
5        B         E         16
6        B         E         16

现在我要指定条形图的颜色我认为最容易创建一个新的十六进制列,这样基因型B的所有个体都是一种颜色,如果在条件E和a下测量,基因型A的个体是第二种颜色如果在条件L下测量,则为第三种颜色。

DF <- DF %>% mutate(colr = ifelse(Genotype == "B", "#409ccd", 
                           ifelse(Condition == "E", "#43cd80", "#ffc0cb"))) 

然后,我可以在基因型列上绘制一个直方图,如下所示:

ggplot(data=DF, aes(Measurment, fill = Condition)) +
  geom_histogram(aes(y=..count.., fill = colr), position='dodge', binwidth = 1) + 
  facet_wrap(~Genotype, nrow=2) + 
  scale_fill_manual(values = c("#409ccd","#ffc0cb","#43cd80")) +
  theme(legend.position="none")

就像这样:

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Statements/export

然而,您可以看到基因型B的列数是基因型A的两倍。如何将基因型B缩小到与基因型A相同的大小?

我考虑在我的数据中添加虚拟条目,其中基因型B具有条件L条目,但是分箱功能然后将这些条目计为测量值,这是误导性的。我也有使用geom_bar()的版本,但这会导致类似的问题。 ggplot必须有办法做到这一点。

任何帮助表示感谢。

2 个答案:

答案 0 :(得分:2)

这样的事可能吗?

ggplot(data=DF, aes(Measurment, fill = Condition)) +
  geom_histogram(data=subset(DF, Genotype!="B"),aes(y=..count.., fill = colr), position='dodge', binwidth = 1) + 
  geom_histogram(data=subset(DF, Genotype=="B"),aes(x = Measurment, y=..count.., fill = colr), position=position_nudge(x=0.25), binwidth = 0.5) +
  facet_wrap(~Genotype, nrow=2) + 
  scale_fill_identity() +
  theme(legend.position="none")

enter image description here

答案 1 :(得分:0)

您想要以下内容吗?我假设柱的大小是指宽度。

library(grid)
library(gridExtra)
p1 <- ggplot(data=DF[DF$Genotype=='A',], aes(Measurment, fill = Condition)) +
  geom_histogram(aes(y=..count.., fill = colr), position='dodge', binwidth = 1) + 
  scale_fill_manual(values = c("#43cd80","#ffc0cb")) +
  theme(legend.position="none")
p2 <- ggplot(data=DF[DF$Genotype=='B',], aes(Measurment, fill = Condition)) +
  geom_histogram(aes(y=..count.., fill = colr), binwidth = 0.5, boundary = 1) + 
  scale_fill_manual(values = c("#409ccd")) +
  theme(legend.position="none")
grid.arrange(p1, p2)

enter image description here