下面是一个示例数据。具有30个唯一样本(ID 1至30)的框架,每个样本具有三个测量值(在三个不同的阈值(“G1”列);5e-03、5e-05、5e-08)。90个观测值中的每一个都有一个p值(p列)。最后,三十个样本中的每一个都可以属于十个不同类别(“G2”)中的一个[对不起,所有的数字变量都有问题!]
# example data.frame
df <- data.frame(
'ID' = as.character(unlist(lapply(seq(1:30), function(x) rep(x,3)))),
'P' = runif(n = 90, min = 0, max = 1),
'G1' = as.character(c('5e-03','5e-05','5e-08')),
'G2' = as.character(unlist(lapply(sample(1:10, size = 30, replace = T), function(x) rep(x,3))))
)
我可以用这个命令生成一个漂亮的条形图;
ggplot(df, aes(x = interaction(ID,G2), y = P, fill = G2)) +
geom_bar(stat = 'identity') +
coord_flip() +
facet_grid(. ~ G1)
看起来是这样的:
图1:具有一个面的图像,使用颜色显示“G2”
ggplot(df, aes(x = interaction(ID,G2), y = P, fill = G2)) +
geom_bar(stat = 'identity') +
coord_flip() +
facet_grid(G2 ~ G1)
这是不对的。当我在G2上刻面时,它绘制了每个刻面中的所有样本。这很难看,因为每个样本只能属于一个G2类别。如何生成只绘制属于该组的条的第二个方面?我尝试过调整facet_grid中的“下降”、“比例”和“空间”变量,但它并没有改善事情。
这就是我要找的——我已经手动绘制了应该在刻面上的矩形。它本质上与地块1相同,只是条形被分割成G2刻面。
首先要注意的是,由于您使用的是G2和G1,因此不再需要x=interaction(ID,G2)
:x=ID
就足够了。
默认情况下,绘图的所有方面共享其x轴和y轴的相同刻度。但是你可以用比例
参数来改变它
ggplot(df, aes(x = ID, y = P, fill = G2)) +
geom_bar(stat = 'identity') +
facet_grid(G1 ~ G2, scales="free_x")
注意,我在网格的定义中交换了G1和G2。但是,我认为不可能让它与coord\u flip()
一起工作。
只是补充一下答案:
ggplot(df, aes(x = ID, y = P, fill = G2)) +
geom_bar(stat = 'identity') +
facet_grid(G1 ~ G2, scales="free", space="free")
这将为每个条提供相同的宽度。