2017-01-25 3 views
3

수직 축에 로그 스케일을 사용하는 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

([geom_h/vline 불완전 또는 무 coord_trans() 아니 라인] https://github.com/tidyverse/ggplot2/issues/895) – Henrik

+1

[오랫동안 알려진 문제입니다] (https://groups.google.com/forum/#!topic/ggplot2/FGbhwyfkc74). – Axeman

답변

1

나는 당신의 직감이 문제가 geom_vline이 요격을 위해 0의 로그를 취하려고하고있는 것을, 올바른 생각합니다. 대신 geom_line을 사용하여 0이 교차하지 않는 선분을 그릴 수 있습니다.

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

그것은이 (고정 폐쇄 아니지만) 문제와 관련 될 수있다
+0

감사합니다. 이것이'ggplot' 버그로보고되어야한다고 생각하십니까? – banbh

관련 문제