我一直在尝试使用 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 版本:
因此,当我生成箱线图时,一切都按预期工作,y 轴为每个分面行适当缩放:
但是,点图为每个分面行保持相同的 y 轴比例:
我读过 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")
但现在 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")
关于r - ggplot2:使用带有 facet_grid 的 geom_dotplot 时没有自由轴比例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34638355/