如何ggplot在垂直轴上使用对数刻度的绘图添加垂直线?
例如,
ggplot(data.frame(x=1:2, y=c(10,20)), aes(x,y)) +
geom_line() +
geom_vline(xintercept = 1.5)
Run Code Online (Sandbox Code Playgroud)
按预期工作.如果将垂直轴转换为对数刻度:
ggplot(data.frame(x=1:2, y=c(10,20)), aes(x,y)) +
geom_line() +
geom_vline(xintercept = 1.5) +
coord_trans(y = 'log')
Run Code Online (Sandbox Code Playgroud)
然后垂直线消失.也许相关的是,如果稍微更改数据:
ggplot(data.frame(x=1:2, y=c(1,20)), aes(x,y)) + # y[1] is now different
geom_line() +
geom_vline(xintercept = 1.5) +
coord_trans(y = 'log')
Run Code Online (Sandbox Code Playgroud)
然后垂直线仍然缺失,但会发出警告消息:
Warning messages:
1: In self$trans$y$transform(y) : NaNs produced
2: In trans$transform(value) : NaNs produced
Run Code Online (Sandbox Code Playgroud)
因此,可能是因为尝试记录0(-Inf和无警告)或负数(NaN和警告)而导致缺失行.
(sessionInfo()给R version 3.3.1 (2016-06-21)和ggplot2_2.2.0.)
我认为你的预感是正确的,问题是 geom_vline 试图将截距的对数为零。您可以改为使用 geom_line 来绘制不穿过零的线段。
ggplot(data.frame(x=1:2, y=c(10,20)), aes(x,y)) +
geom_line() +
geom_line(aes(x=c(1.5,1.5), y=c(0.1,200))) +
coord_trans(y = 'log', limy = c(10,20))
Run Code Online (Sandbox Code Playgroud)