15

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

 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是空闲的,它不知道为只包含缺失的构面取哪个值?

有解决办法吗?

4

3 回答 3

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这是因为 for只有 NA 的事实。

当只有 NA 时尝试使用自由比例不是很合乎逻辑。在我看来,这是一个概念问题。这样做的原因是,在不使用scales="free"参数的情况下,使用了其他子图的比例。使用scales="free"参数(或free_xfree_y)时,每个子图的比例将根据比例的长度设置。当只有 NA 时,无法确定刻度的长度,这反过来会导致错误消息。

这就是为什么free_x起作用的原因(尽管它给出了相同的结果)。

总结:当你的一个组只有 NA 时,你不能scales="free"在你的情节中使用。因此,您有两个选择(在我看来):

  • 省略scales="free"参数以获得所需的空子图。
  • 用 替换 NA 0,但这只是当您没有负值时的解决方案。
于 2014-02-04T22:38:08.107 回答
0

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

于 2017-06-15T07:40:03.473 回答
-2

我们可以解决这个问题,原因是我们在公式中使用大写 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()

我希望这有帮助

于 2016-03-13T11:27:58.837 回答