-
Notifications
You must be signed in to change notification settings - Fork 35
/
set_theme.R
114 lines (100 loc) · 3.4 KB
/
set_theme.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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
# Set theme for graphs
# Sean Higgins
set_theme <- function(
theme = theme_classic(),
size = 14,
title_size = size,
title_hjust = 0.5,
y_title_size = size,
x_title_size = size,
y_title_margin = NULL,
x_title_margin = NULL,
y_text_size = size,
x_text_size = size,
y_text_color = "black",
x_text_color = "black",
y_title_color = "black",
x_title_color = "black",
legend_text_size = size,
legend_position = "none",
legend_key_fill = NA,
legend_key_color = NA,
plot_title_position = NULL,
plot_margin = theme_classic()$plot.margin,
axis_title_y_blank = FALSE, # to fully left-align
aspect_ratio = NULL
) {
# Dependencies
require(ggplot2)
require(stringr)
# Size
size_ <- str_c("size = ", size) # this argument always included
if (is.na(y_title_size)) {
y_title <- "element_blank()"
} else {
# y-title margin
if (!is.null(y_title_margin)) y_title_margin_ <- str_c("margin = margin(", y_title_margin, ")")
else y_title_margin_ <- ""
# y-title color
if (!is.null(y_title_color)) y_title_color_ <- str_c("color = '", y_title_color, "'")
else y_title_color_ <- ""
# create y_title
y_title <- str_c("element_text(", size_, ",", y_title_margin_, ",", y_title_color_, ")")
}
if (is.na(x_title_size)) {
x_title <- "element_blank()"
}
else {
# x-title margin
if (!is.null(x_title_margin)) x_title_margin_ <- str_c("margin = margin(", x_title_margin, ")")
else x_title_margin_ <- ""
# x-title color
if (!is.null(x_title_color)) x_title_color_ <- str_c("color = '", x_title_color, "'")
else x_title_color_ <- ""
# create x_title
x_title <- str_c("element_text(", size_, ",", x_title_margin_, ",", x_title_color_, ")")
}
if (axis_title_y_blank) {
y_title <- "element_blank()" # overwrite what it was written as above
}
# Legend key
if (is.na(legend_key_fill) & is.na(legend_key_color)) {
legend_key <- "element_blank()"
} else {
if (is.na(legend_key_fill) & !(is.na(legend_key_color))) {
legend_key <- str_c("element_rect(",
"fill = NA", ",",
"color = '", legend_key_color, "'", ", ",
")"
)
} else if (!(is.na(legend_key_fill)) & is.na(legend_key_color)) {
legend_key <- str_c("element_rect(",
"fill = '", legend_key_fill, "'", ", ",
"color = NA",
")"
)
} else { # neither missing
legend_key <- str_c("element_rect(",
"fill = '", legend_key_fill, "'", ", ",
"color = '", legend_key_color, "'",
")"
)
}
}
theme + theme(
plot.title = element_text(size = title_size, hjust = title_hjust),
plot.title.position = plot_title_position,
axis.title.y = eval(parse(text = y_title)),
axis.title.x = eval(parse(text = x_title)),
axis.ticks = element_blank(),
axis.text.y = element_text(size = y_text_size, color = y_text_color),
axis.text.x = element_text(size = x_text_size, color = x_text_color),
axis.line = element_blank(), # manual axes
legend.key = eval(parse(text = legend_key)),
legend.text = element_text(size = legend_text_size),
legend.title = element_text(size = legend_text_size),
aspect.ratio = aspect_ratio,
plot.margin = plot_margin,
legend.position = legend_position
)
}