如何在使用对数刻度时添加垂直线?

时间:2017-01-25 14:33:39

标签: r ggplot2

如何在垂直轴上使用对数刻度的ggplot绘图添加垂直线?

例如,

ggplot(data.frame(x=1:2, y=c(10,20)), aes(x,y)) + 
  geom_line() + 
  geom_vline(xintercept = 1.5)

按预期工作。如果将垂直轴转换为对数刻度:

ggplot(data.frame(x=1:2, y=c(10,20)), aes(x,y)) +
  geom_line() + 
  geom_vline(xintercept = 1.5) + 
  coord_trans(y = 'log')

然后垂直线消失。也许相关的是,如果稍微改变数据:

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')

然后仍然缺少垂直线,但会发出警告信息:

Warning messages:
1: In self$trans$y$transform(y) : NaNs produced
2: In trans$transform(value) : NaNs produced

因此,尝试记录0(-Inf和无警告)或负数(NaN和警告)可能导致缺失行。

sessionInfo()提供R version 3.3.1 (2016-06-21)ggplot2_2.2.0。)

1 个答案:

答案 0 :(得分:2)

我认为你的预感是正确的,问题是geom_vline试图将截距记录为0。您可以使用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))

enter image description here