r - 不均匀类别上的小平面条形图

标签 r ggplot2 facet

这是一个示例 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/

相关文章:

r - ggplot2:在绘图少于视口(viewport)的网格上绘图

r - ggplot2:添加用于 facet_grid 的变量名称

r - dplyr::if_else 更改日期时间 (POSIXct) 值

r - Shiny 的传单 map 瓦片没有出现

r - 画一头优秀的牛

r - 如何在组合 ggplots 上添加线条,从一个图上的点到另一个图上的点?

r - 如何使用 facet_wrap 绘制 ggplot2,显示每个组的百分比,而不是整体百分比?

ElasticSearch 分组方面

r - 确定点所在的 geoJSON 多边形

r - 如何使用循环为 R 中的多个网页抓取网站数据?