有人可以解释为什么会这样:
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
空闲时,它不知道对仅包含缺失的构面采取哪个值?
有解决办法吗?
答案 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_x
或free_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()
我希望这个帮助