r - ggplot2:使用带有 facet_grid 的 geom_dotplot 时没有自由轴比例

标签 r ggplot2

我一直在尝试使用 facet_grid 生成一系列点图。这样做时,我注意到 geom_dotplot 似乎没有响应 facet_grid 的 scales = "free_y"参数。

下面是一些示例代码:

require(ggplot2)

#Example data
set.seed(3)
df = data.frame(Gene = rep(c("a", "b", "c", "d"), each=20),
                ToD = rep(c("Morning", "Evening"), times = 40),
                Expression = c(runif(20, min=0, max=10),
                               runif(20, min=0, max=1),
                               runif(20, min=0, max=1000),
                               runif(20, min=0, max=100)))

#Box plots of example data
ggplot(df, aes(x = ToD, y = Expression)) +
    geom_boxplot() +
    facet_grid(Gene ~ ., scales = "free_y")

#Dot plots of example data
ggplot(df, aes(x = ToD, y = Expression)) +
    geom_dotplot(binaxis = "y", stackdir = "centerwhole") +
    facet_grid(Gene ~ ., scales = "free_y")

这是我目前使用的 R 和 ggplot2 版本:
  • R 版本 3.2.2 (2015-08-14)
  • ggplot2_1.0.1.9003

  • 因此,当我生成箱线图时,一切都按预期工作,y 轴为每个分面行适当缩放:

    Box plots of test data

    但是,点图为每个分面行保持相同的 y 轴比例:

    Dot plots of test data

    我读过 ggplot2 中的一个已知错误,其中 coord_flip 和 facet_grid 在指定自由比例时不能一起工作。这与同样的问题有关吗?

    虽然我可以单独生成每个图,然后将它们与 grid.arrange 结合,但这对我来说很麻烦。我正在尝试将这些点图与其他多面图对齐,并且我想避免也需要使用 grid.arrange 重新生成所有这些点图。有什么想法吗?

    感谢您提供的任何帮助,如果我能提供任何进一步的说明,请告诉我。

    最佳答案

    我一直在阅读文档 ?geom_dotplot .显然, binpositions-option 可以设置为“all”(所有数据放在一起)或“bygroup”;默认值。因此,将 Gene 用作组和面,binpositions 可以变化,至少返回自由 y 轴:

    ggplot(df, aes(x = ToD, y = Expression, group=Gene)) +
      geom_dotplot(binaxis = "y", stackdir = "centerwhole", binpositions="bygroup") +
      facet_grid(Gene ~ ., scales = "free_y")
    

    enter image description here

    但现在 x 轴上的分组消失了。可能有更好的解决方案,但通过 Gene 和 ToD 之间的交互分组似乎可以解决它:
     ggplot(df, aes(x = ToD, y = Expression, group=interaction(Gene,ToD))) +
      geom_dotplot(binaxis = "y", stackdir = "centerwhole", binpositions="bygroup") +
      facet_grid(Gene ~ ., scales = "free_y")
    

    enter image description here

    关于r - ggplot2:使用带有 facet_grid 的 geom_dotplot 时没有自由轴比例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34638355/

    相关文章:

    r - 根据定义的颜色代码为 ggplot 点着色

    r - 当尝试根据聚合数据绘制堆积面积图时,为什么 ggplot geom_area 为空?

    r - 从动态 Shiny Markdown 创建静态报告

    r - 如何按字段类型(例如,数字、字符)对我的 data.frame 进行子集化?

    r - 基于第三个变量(数字)的列联表

    正则表达式返回文件名,删除路径和文件扩展名

    r - 将outer()应用于两个列表

    r - ggplot2:使用 geom_segment 和 geom_text_repel 创建由线条和填充框组成的线性图(转录因子结合位点)

    r - 如何在 ggplot2 中使用 facet_grid 获得适合的长标签?

    R - ggplot2 在 Windows 上生成的图表质量很差