2017-01-25 2 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(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 пытается взять журнал ноль для перехвата. Вместо этого вы можете использовать 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

Смежные вопросы