2016-01-06 85 views
11

我一直在尝试使用facet_grid生成一系列点图。这样做,我注意到geom_dotplot似乎没有响应facet_grid的scales =“free_y”参数。ggplot2:与facet_grid一起使用geom_dotplot时没有自由轴缩放

下面是一些示例代码:

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年8月14日)
  • ggplot2_1.0.1.9003

所以,当我产生箱线图,一切正常与y轴预期适当地缩放每个面行:

Box plots of test data

然而,点图维持方方面面行相同的Y轴标:

Dot plots of test data

我读过有关已知的bug在ggplot2中,当指定自由标度时,coord_flip和facet_grid不能一起工作。这与这个问题有关吗?

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

感谢您提供的任何帮助,请让我知道,如果我可以提供任何进一步的澄清。

+0

我无法复制错误与'ggplot2_1.0.1'和​​的r版本3.2.2 (2015-08-14)',对我来说工作正常 – mlegge

+0

我刚刚更新到ggplot2_2.0.0,我仍然遇到同样的问题。我想我可能需要降级? –

+2

我能够通过'ggplot2_2.0.0'和相同的R版本复制错误 – mlegge

回答

3

我一直在阅读文档?geom_dotplot。显然,组合选项可以设置为“全部”(所有数据一起使用)或“按组”。默认。因此,使用基因既作为基团和作为小面,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轴的分组消失了。有可能是一个更好的解决方案,而是由基因和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

+0

有趣。我仍然想知道这是否是geom_boxplot和facet_grid函数之间的预期交互(在这种情况下,它看起来过于复杂),或者这是一个错误。无论哪种方式,您的解决方案解决了我目前的问题。在标记答案之前,我会将其打开一两天,以免阻止其他人做出贡献。谢谢。 –

相关问题