forked from pik-piam/mip
-
Notifications
You must be signed in to change notification settings - Fork 0
/
showMultiLinePlots.R
96 lines (87 loc) · 3.09 KB
/
showMultiLinePlots.R
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
#' Show Multi-Line Plots
#'
#' Show 2 sets of plots with different regions in the same plot (value over time).
#'
#' Creates two plots (main region + others) with the values of \code{vars} over
#' time. Different regions are shown in the same plot. Faceting is done by
#' \code{variable}. The plots arranged and shown.
#'
#' @param vars A character vector. The variables to be plotted.
#' @param nrowNum An integer value. Number of rows of the panel figures
#' @inheritParams showLinePlots
#' @return \code{NULL} is returned invisible.
#' @section Example Plots:
#' \if{html}{page 1: \figure{showMultiLinePlots1.png}{options: width="100\%"}}
#' \if{html}{page 2: \figure{showMultiLinePlots2.png}{options: width="100\%"}}
#' @examples
#' \dontrun{
#' options(mip.mainReg = "World")
#' data <- as.quitte(data)
#' vars <- c(
#' "FE|Transport pCap",
#' "FE|Buildings pCap",
#' "FE|Industry pCap")
#' showMultiLinePlots(data, vars)
#' }
#' @export
#' @importFrom rlang .data .env
#' @importFrom ggplot2 ylim
showMultiLinePlots <- function(
data, vars, scales = "free_y",
nrowNum = 1,
mainReg = getOption("mip.mainReg")
) {
data <- as.quitte(data)
# Validate function arguments.
stopifnot(is.character(vars))
stopifnot(is.character(scales) && length(scales) == 1)
checkGlobalOptionsProvided("mainReg")
stopifnot(is.character(mainReg) && length(mainReg) == 1)
d <- data %>%
filter(.data$variable %in% .env$vars) %>%
droplevels()
dMainScen <- d %>%
filter(.data$region == .env$mainReg, .data$scenario != "historical") %>%
droplevels()
dMainHist <- d %>%
filter(.data$region == .env$mainReg, .data$scenario == "historical") %>%
droplevels()
dRegiScen <- d %>%
filter(.data$region != .env$mainReg, .data$scenario != "historical") %>%
droplevels()
dRegiHist <- d %>%
filter(.data$region != .env$mainReg, .data$scenario == "historical") %>%
droplevels()
regions <- levels(dRegiScen$region)
warnMissingVars(dMainScen, vars)
if (NROW(dMainScen) == 0) {
warning("Nothing to plot.", call. = FALSE)
return(invisible(NULL))
}
label <- paste0("(", paste0(levels(d$unit), collapse = ","), ")")
p1 <- dMainScen %>%
ggplot(aes(.data$period, .data$value)) +
geom_line(aes(linetype = .data$scenario)) +
geom_point(data = dMainHist, aes(shape = .data$model)) +
geom_line(data = dMainHist, aes(group = paste0(.data$model, .data$region)), alpha = 0.5) +
facet_wrap(vars(.data$variable), scales = scales, nrow = nrowNum) +
theme_minimal() +
expand_limits(y = 0) +
ylab(label)
p2 <- dRegiScen %>%
ggplot(aes(.data$period, .data$value, color = .data$region)) +
geom_line(aes(linetype = .data$scenario)) +
geom_point(data = dRegiHist, aes(shape = .data$model)) +
geom_line(data = dRegiHist, aes(group = paste0(.data$model, .data$region)), alpha = 0.5) +
facet_wrap(vars(.data$variable), scales = scales, nrow = nrowNum) +
theme_minimal() +
scale_color_manual(values = plotstyle(regions)) +
expand_limits(y = 0) +
ylab(label)
# Show plots.
print(p1)
cat("\n\n")
print(p2)
cat("\n\n")
return(invisible(NULL))
}