2017-01-25 9 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') 

を、次に縦線がまだ不足しているが、警告メッセージが発行されています:おそらく1は少しのデータを変更した場合という関係があり

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が傍受のためにゼロのログを取るしようとしていることであること、正しいことだと思います。代わりに、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

+0

ありがとう!これが 'ggplot'バグとして報告されるべきだと思いますか? – banbh

関連する問題