ggplot с использованием facet_wrap в R?
Я хочу использовать face_wrap
функциональность ggplot
чтобы нарисовать следующий пример данных. Вplot
не кажется правильным. Вline
должен иметь гладкое соединение без лишнего места в обоих facets
(т.е. Facet A
имеет пустое место от 10 до 15, а Facet B
имеет пробел 0-5). Кроме того, месяцы на оси x немного странные.
library(tidyverse)
library(lubridate)
set.seed(555)
D <- data.frame(Date = seq(as.Date("2001-01-01"), to= as.Date("2003-12-31"), by="day"),
A = runif(1095, 0,10), Z = runif(1095, 5,15))
D %>% pivot_longer(-Date, names_to = "Variable", values_to = "Value") %>%
mutate(Year = year(Date), Month = month(Date)) %>%
ggplot(aes(x = Month, y = Value, col = as.factor(Year)))+
geom_line()+facet_wrap(~Variable, nrow = 2)
Желаемый результат: я ищу график, как показано ниже, где линии имеют плавную связь от месяца к месяцу.
2 ответа
Решение
Если вы хотите использовать день года в качестве x-позиции и по-прежнему получать действительную ось даты, вы можете отменить год своей даты:
library(tidyverse)
library(lubridate)
#>
#> Attaching package: 'lubridate'
#> The following object is masked from 'package:base':
#>
#> date
set.seed(555)
D <- data.frame(Date = seq(as.Date("2001-01-01"), to= as.Date("2003-12-31"), by="day"),
A = runif(1095, 0,10), Z = runif(1095, 5,15))
D %>% pivot_longer(-Date, names_to = "Variable", values_to = "Value") %>%
mutate(Year = year(Date), Month = month(Date),
Date = {year(Date) <- 2000; Date}) %>%
ggplot(aes(x = Date, y = Value, col = as.factor(Year)))+
geom_line()+facet_wrap(~Variable, nrow = 2) +
scale_x_date(date_breaks = "1 month",
date_labels = "%b")
Создано 18.07.2020 пакетом REPEX (v0.3.0)
Вы можете попробовать это:
D %>% pivot_longer(-Date, names_to = "Variable", values_to = "Value") %>%
mutate(Year = year(Date), Month = month(Date)) %>%
ggplot(aes(x = factor(Month), y = Value, col = as.factor(Year),group=factor(Year)))+
geom_line()+facet_wrap(~Variable, nrow = 2,scales='free')