1
ggplot(data.frame(x=1:100, y=1:100)) +
       geom_point(aes(x=x, y=y)) + 
       scale_y_continuous(limits=c(0, 189), labels=function(x) {print(x);x} )
[1]   0  50 100 150 NA

当我尝试自定义标签功能时,我没有处理NA,导致错误。

经过调查,我发现有时会生成标签NA,尽管它没有显示在图中。

什么时候NA生成?为什么会NA产生?

我试pretty(c(0,189)) # [1] 0 50 100 150 200了,不输出NA

更新

好吧,我相信这是因为 生成的值pretty始终覆盖 的范围x,因此最小值、最大值超出了绘图范围。

4

1 回答 1

1

发生这种情况的原因很微妙,但在 ggplot 中却是一个非常常见的错误。

当您使用scale_*命令限制样本空间时,它不允许在任何函数中使用超出这些限制的数据。NA因此,当限制设置为 189 时,为什么您的函数会返回。

不要用 限制规模scale_y_continuous,尝试coord_cartesian(xlim = c(0, 189))

这将保留完整的数据集,即使仅显示限制设置的部分coord_cartesian

像这样:

ggplot(data.frame(x=1:100, y=1:100)) +
geom_point(aes(x=x, y=y)) + 
scale_y_continuous(breaks = seq(0, 200, 50)) +
scale_x_continuous(breaks = seq(0, 200, 50)) +
coord_cartesian(xlim = c(0, 200), ylim = c(0, 200))
于 2013-09-21T00:37:17.973 回答