@@ -32,6 +32,10 @@ plot_measures <- function(
32
32
shape_var = NULL ,
33
33
save_path = NULL ,
34
34
colour_palette = NULL ,
35
+ y_scale = NULL ,
36
+ scale_measure = NULL ,
37
+ shapes = NULL ,
38
+ date_breaks = " 1 month" ,
35
39
legend_position = " bottom" ) {
36
40
# Test if all columns expected in output from generate measures exist
37
41
# expected_names <- c("measure", "interval_start", "interval_end", "ratio", "numerator", "denominator")
@@ -48,7 +52,8 @@ plot_measures <- function(
48
52
y = {{ select_value }},
49
53
colour = {{ colour_var }},
50
54
group = {{ colour_var }},
51
- shape = {{ colour_var }}
55
+ shape = {{ colour_var }},
56
+ fill = {{ colour_var }}
52
57
)
53
58
) +
54
59
geom_point(size = 2 ) +
@@ -60,7 +65,7 @@ plot_measures <- function(
60
65
linewidth = .7
61
66
) +
62
67
scale_x_date(
63
- date_breaks = " 1 month " ,
68
+ date_breaks = {{ date_breaks }} ,
64
69
labels = scales :: label_date_short()
65
70
) +
66
71
guides(
@@ -72,33 +77,52 @@ plot_measures <- function(
72
77
x = x_label ,
73
78
y = y_label ,
74
79
colour = guide_label ,
75
- shape = guide_label
80
+ shape = NULL ,
81
+ fill = NULL
76
82
) +
77
83
theme(
78
84
legend.position = legend_position ,
79
85
plot.title = element_text(hjust = 0.5 ),
80
86
text = element_text(size = 14 )
81
87
)
82
88
83
- if (! is.null(colour_palette )) {
84
- plot_tmp <- plot_tmp + scale_colour_manual(values = colour_palette )
89
+ # Change colour based on specified colour palette
90
+ if (! is.null(colour_palette )) {
91
+ if (length(colour_palette ) == 1 && colour_palette == " plasma" ) {
92
+ plot_tmp <- plot_tmp + scale_colour_viridis_d(option = " plasma" , end = .75 ) +
93
+ geom_line(size = 0.5 ) +
94
+ geom_point(size = 2.5 )
95
+ } else {
96
+ plot_tmp <- plot_tmp + scale_colour_manual(values = colour_palette )
97
+ }
85
98
} else {
86
99
plot_tmp <- plot_tmp + scale_colour_viridis_d(end = .75 )
87
100
}
88
101
102
+ if (! is.null(shapes ) && shapes == " condition_shapes" ) {
103
+ plot_tmp <- plot_tmp + scale_shape_manual(values = condition_shapes )
104
+ }
105
+
89
106
# Automatically change y scale depending selected value
90
- if (rlang :: as_label(enquo(select_value )) == " ratio" ) {
107
+ scale_label <- rlang :: as_label(enquo(scale_measure ))
108
+ if (is.null(scale_measure )) {
109
+ plot_tmp <- plot_tmp + scale_y_continuous(
110
+ limits = c(0 , NA ),
111
+ labels = scales :: label_number()
112
+ )
113
+ } else if (scale_measure == " rate" ) {
91
114
plot_tmp <- plot_tmp + scale_y_continuous(
92
115
limits = c(0 , NA ),
93
- # scale = 1000 to calculate rate per 1000 people
94
116
labels = scales :: label_number(scale = 1000 )
95
117
)
118
+ } else if (scale_measure == " percent" ) {
119
+ plot_tmp <- plot_tmp + scale_y_continuous(labels = scales :: percent )
96
120
} else {
97
- plot_tmp <- plot_tmp + scale_y_continuous(
98
- limits = c(0 , NA ),
99
- labels = scales :: label_number()
100
- )
101
- }
121
+ plot_tmp <- plot_tmp + scale_y_continuous(
122
+ limits = c(0 , NA ),
123
+ labels = scales :: label_number()
124
+ )
125
+ }
102
126
103
127
# Add facets if requested
104
128
# Ideally we would want to check facet_var instead of having an additional argument facet_wrap
@@ -107,7 +131,13 @@ plot_measures <- function(
107
131
plot_tmp <- plot_tmp +
108
132
facet_wrap(vars({{ facet_var }}), ncol = 2 )
109
133
}
134
+ # Add y_scale to add option for free_y
135
+ if (! is.null(y_scale ) && y_scale == " free_y" ) {
136
+ plot_tmp <- plot_tmp +
137
+ facet_wrap(~ source , scales = " free_y" )
138
+ }
110
139
140
+ # Add save_path option
111
141
if (! is.null(save_path )) {
112
142
ggsave(
113
143
filename = here(" released_output" , " results" , " figures" , save_path ),
@@ -120,8 +150,43 @@ plot_measures <- function(
120
150
plot_tmp
121
151
}
122
152
153
+ # Combining two figures into one using patchwork
154
+ patch_figures <- function (figure_1 , figure_2 , save_path = NULL ) {
155
+ combined_figure <- (figure_1 + figure_2 ) +
156
+ plot_annotation(tag_levels = " A" ) +
157
+ plot_layout(guides = " collect" , widths = c(2 , 1 )) &
158
+ theme(
159
+ legend.position = " bottom" ,
160
+ text = element_text(size = 15 ),
161
+ strip.background = element_rect(size = 0 ),
162
+ strip.text.x = element_text(size = 13 , face = " bold" )
163
+ )
164
+
165
+ if (! is.null(save_path )) {
166
+ ggsave(
167
+ filename = here(" released_output" , " results" , " figures" , save_path ),
168
+ plot = combined_figure ,
169
+ width = 15 ,
170
+ height = 6
171
+ )
172
+ }
173
+ combined_figure
174
+ }
175
+
123
176
# Colour palettes
124
177
gradient_palette <- c(" #001F4D" , " #0056B3" , " #007BFF" , " #66B3E2" , " #A4D8E1" , " grey" )
125
178
region_palette <- c(" red" , " navy" , " #018701" , " #ffa600ca" , " purple" , " brown" , " #f4a5b2" , " cyan" , " green" , " grey" )
126
179
ethnicity_palette <- c(" #42db0188" , " #0056B3" , " #ff0000c2" , " #a52a2a5a" , " purple" , " grey" )
127
180
sex_palette <- c(" red" , " blue" )
181
+ dark2_palette <- RColorBrewer :: brewer.pal(n = 8 , name = " Dark2" )
182
+
183
+ # Custom shapes
184
+ condition_shapes = c(
185
+ " Acute Sinusitis" = 15 ,
186
+ " Infected Insect Bite" = 19 ,
187
+ " UTI" = 4 ,
188
+ " Acute Otitis Media" = 23 ,
189
+ " Acute Pharyngitis" = 3 ,
190
+ " Herpes Zoster" = 17 ,
191
+ " Impetigo" = 8
192
+ )
0 commit comments