2017-01-27 3 views
1

Я пытаюсь создать линейную диаграмму ggplot с временным рядом, у которого отсутствуют данные. Я хочу пометить значения NA как NA на самой диаграмме, но не строить линию через эти точки (т. Е. Иметь разрыв в строке). Ниже приведен воспроизводимый пример того, что я пробовал до сих пор. Я бы хотел, чтобы на диаграмме была метка «NA» чуть выше точки y = 0 для каждого года, где число = NA.Значения метки NA в geom_line

library(ggplot2) 

year <- c(1990:2000) 
number <- c(10, 20, 30, 40, NA, 50, 60, NA, 70, 80, 90) 

data <- data.frame(year, number) 

ggplot(data, aes(x = year, y = number)) + 
    geom_line() + 
    geom_text(data = subset(data, !is.na(number)), 
      aes(label = number), 
      hjust = 1, 
      vjust = -1) + 
    geom_text(data = subset(data, is.na(number)), 
      aes(label = "NA")) 

ответ

2

Поскольку geom_text функций наследуют y расположения от начальной ggplot функции (которая NA для этих записей), вам необходимо явно задать значение y во втором geom_text вызова.

library(ggplot2) 

year <- c(1990:2000) 
number <- c(10, 20, 30, 40, NA, 50, 60, NA, 70, 80, 90) 

data <- data.frame(year, number) 

ggplot(data, aes(x = year, y = number)) + 
    geom_line() + 
    geom_text(data = subset(data, !is.na(number)), 
       aes(label = number), 
       hjust = 1, 
       vjust = -1) + 
    geom_text(data = subset(data, is.na(number)), 
       aes(y = 1, label = "NA")) 
+1

Во избежание предупреждения «Удалено 2 строки, содержащие отсутствующие значения (geom_text)». вы должны также указать подмножество (например, 'geom_text (data = subset (data,! is.na (number)), aes (label = subset (number,! is.na (number))), hjust = 1, vjust = -1) ') –

+0

Кроме того, для того, чтобы быть приверженцем, я бы рекомендовал не использовать' data' в качестве имени объекта, поскольку это базовая функция R. –