为什么标签会为scale_y_continuous生成NA?

时间:2013-09-20 11:37:53

标签: r ggplot2

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的范围,因此最小值,最大值超出了绘图范围。

1 个答案:

答案 0 :(得分:1)

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

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

不要使用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))