Прежде чем указать, какой столбец вы хотите использовать для оси Y, ggplot
подготовится для сопоставления со всем фреймом данных.Поэтому, если вы просто введете ggplot(data, aes(x = date))
, вы уже получите пустой график с этим диапазоном:
Так что если вы не хотите, чтобы некоторыеДля печати всего диапазона необходимо сначала отфильтровать набор данных по строкам, которые определены для столбца, который вы собираетесь использовать для значений y
.Например, вы можете создать график X2, используя:
temp <- data[complete.cases(data[c(1,3)]), c(1,3)]
ggplot(temp, aes(x = date, X2)) + geom_line()
Мне нравится делать это, используя dplyr
и tidyr
:
library(dplyr); library(tidyr)
temp <- data %>% select(date, X2) %>% drop_na()
ggplot(temp, aes(x = date, X2)) + geom_line()
Чтобы сделать это для всех переменных, вот подход, использующий dplyr
и tidyr
с purrr
:
library(purrr); library(dplyr); library(tidyr)
plots <- data %>%
# Convert to long form and remove NA rows
gather(var, value, -date) %>%
drop_na() %>%
# For each variable, nest all the available data
group_by(var) %>%
nest() %>%
# Make a plot based on each nested data, where we'll use the
# data as the first parameter (.x), and var as the second
# parameter (.y), feeding those into ggplot.
mutate(plot = map2(data, var,
~ggplot(data = .x, aes(date, value)) +
geom_line() +
labs(title = .y, y = .y)))
# At this point we have a nested table, with data and plots for each variable:
plots
# A tibble: 3 x 3
var data plot
<chr> <list> <list>
1 X1 <tibble [5 x 2]> <S3: gg>
2 X2 <tibble [3 x 2]> <S3: gg>
3 X3 <tibble [5 x 2]> <S3: gg>
# To make this like the OP, we can extract just the plots part, with
plots <- plots %>% pluck("plot")
plots
plots[[1]]
plots[[2]] # or use `plots %>% pluck(2)`
plots[[3]]