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