facet_grid和scales =“free”的行为,缺少数据

时间:2013-04-26 13:27:48

标签: r ggplot2

有人可以解释为什么会这样:

 d <- data.frame(x = 1:10, y = as.numeric(c(1:4,rep(NA,6))),z=rep(1:5,2))
 ggplot(data = d, aes(x, y)) + geom_point() +facet_grid(z~.)

scales="free"添加到facet_grid时会引发错误:

 d <- data.frame(x = 1:10, y = as.numeric(c(1:4,rep(NA,6))),z=rep(1:5,2))
 ggplot(data = d, aes(x, y)) + geom_point() +facet_grid(z~.,scales="free")

# Error in seq.default(from = best$lmin, to = best$lmax, by = best$lstep) : 
#  'from' must be of length 1

scales不可用时,它可能会使用所有方面的最小值和最大值。当scales空闲时,它不知道对仅包含缺失的构面采取哪个值?

有解决办法吗?

3 个答案:

答案 0 :(得分:3)

我看了两个解决方案。

1)

ggplot(data = d, aes(x, y)) + 
  geom_point() +
  facet_grid(z~.,scales="free_x")

是否可行,但与没有scales="free"部分的结果相同。

2)

library(gridExtra)
p1 <- ggplot(data = d[d$z==1,], aes(x, y)) + geom_point()
p2 <- ggplot(data = d[d$z==2,], aes(x, y)) + geom_point()
p3 <- ggplot(data = d[d$z==3,], aes(x, y)) + geom_point()
p4 <- ggplot(data = d[d$z==4,], aes(x, y)) + geom_point()
p5 <- ggplot(data = d[d$z==5,], aes(x, y)) + geom_point()
grid.arrange(p1,p2,p3,p4,p5,ncol=1)

这不起作用。单独绘制图表时,您会发现p5无法绘制。这是因为z=5 y只有NA。

当只有NA时,尝试使用自由缩放比例不是很合理。在我看来,这是一个概念问题。这样做的原因是,如果不使用scales="free"参数,则使用其他子图的比例。使用scales="free"参数(或free_xfree_y)时,将根据比例的长度设置每个子图的比例。当只有NA时,无法确定比例的长度,从而导致错误信息。

这就是free_x确实起作用的原因(虽然它给出了相同的结果)。

总结:如果您的某个群组只有NA,则无法在您的情节中使用scales="free"。因此,您有两种选择(在我看来):

  • 省略scales="free"参数以获得所需的空子图。
  • 0替换NA,但这只是没有负值时的解决方案。

答案 1 :(得分:0)

你也可以使用na.omit(数据帧)。这对我有用。我在722K行数据中只有一个(!)NA。这足以得到这个错误。

答案 2 :(得分:-2)

我们可以解决这个问题,而来源是我们使用的是Capital X而不是公式中的小x,错误的是: ggplot(isotidy,aes(X = site,y = dN_fish,fill = site))+ geom_boxplot() 并且应该如下所示: ggplot(isotidy,aes(x = site,y = dN_fish,fill = site))+ geom_boxplot()

我希望这个帮助