这是一个示例 data.frame,它具有 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)

看起来像这样:

Plot 1: image with one facet, and 'G2' visualised using colour

然而,我真正想做的是有两个方面;列上的“G1”(目前是这样),而不是使用条形颜色来划分“G2”变量,我想要 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 中的“drop”、“scale”和“space”变量,但并没有改善。

This 是我正在寻找的 - 我已经在应该在构面中的绘图部分上手动绘制了矩形。它与图 1 基本相同,只是条形被拆分为 G2 小平面。

最佳答案

首先请注意,由于您正在使用 G2 和 G1,因此您不再需要 x=interaction(ID,G2):x=ID 就足够了。

默认情况下,图的所有方面共享相同的 x 轴和 y 轴比例。但是你可以用 scales 参数改变它

ggplot(df, aes(x = ID, y = P, fill = G2)) +
  geom_bar(stat = 'identity') +
  facet_grid(G1 ~ G2, scales="free_x")

请注意,我在网格的定义中交换了 G1 和 G2。不过,我认为它无法与 coord_flip() 一起使用。

关于r - 不均匀类别的方面条形图,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40607487/

10-12 17:59