我的数据与下面的示例数据类似,我试图绘制基因型列上刻面的测量列的直方图。最终,我希望条形图的颜色以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必须有办法做到这一点。
任何帮助表示感谢。
答案 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")
答案 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)