maidr 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (206) hide show
  1. package/.Rbuildignore +1 -0
  2. package/.eslintignore +3 -0
  3. package/.eslintrc.json +6 -0
  4. package/.github/workflows/build.yml +20 -0
  5. package/.prettierignore +3 -0
  6. package/.prettierrc.json +7 -0
  7. package/.vscode/extensions.json +25 -0
  8. package/.vscode/settings.json +30 -0
  9. package/.vscode/tasks.json +57 -0
  10. package/CHANGELOG.md +7 -0
  11. package/CITATION.cff +21 -0
  12. package/CONTRIBUTING.md +87 -0
  13. package/LICENSE.md +595 -0
  14. package/README.md +341 -0
  15. package/dist/maidr.js +8851 -0
  16. package/dist/maidr.min.js +1 -0
  17. package/dist/styles.css +244 -0
  18. package/dist/styles.min.css +1 -0
  19. package/docs/Audio.html +1398 -0
  20. package/docs/Constants.html +256 -0
  21. package/docs/Description.html +582 -0
  22. package/docs/Helper.html +364 -0
  23. package/docs/LogError.html +905 -0
  24. package/docs/Menu.html +665 -0
  25. package/docs/Position.html +174 -0
  26. package/docs/Resources.html +338 -0
  27. package/docs/Review.html +333 -0
  28. package/docs/Tracker.html +965 -0
  29. package/docs/audio.js.html +635 -0
  30. package/docs/constants.js.html +1242 -0
  31. package/docs/display.js.html +1184 -0
  32. package/docs/fonts/OpenSans-Bold-webfont.eot +0 -0
  33. package/docs/fonts/OpenSans-Bold-webfont.svg +1830 -0
  34. package/docs/fonts/OpenSans-Bold-webfont.woff +0 -0
  35. package/docs/fonts/OpenSans-BoldItalic-webfont.eot +0 -0
  36. package/docs/fonts/OpenSans-BoldItalic-webfont.svg +1830 -0
  37. package/docs/fonts/OpenSans-BoldItalic-webfont.woff +0 -0
  38. package/docs/fonts/OpenSans-Italic-webfont.eot +0 -0
  39. package/docs/fonts/OpenSans-Italic-webfont.svg +1830 -0
  40. package/docs/fonts/OpenSans-Italic-webfont.woff +0 -0
  41. package/docs/fonts/OpenSans-Light-webfont.eot +0 -0
  42. package/docs/fonts/OpenSans-Light-webfont.svg +1831 -0
  43. package/docs/fonts/OpenSans-Light-webfont.woff +0 -0
  44. package/docs/fonts/OpenSans-LightItalic-webfont.eot +0 -0
  45. package/docs/fonts/OpenSans-LightItalic-webfont.svg +1835 -0
  46. package/docs/fonts/OpenSans-LightItalic-webfont.woff +0 -0
  47. package/docs/fonts/OpenSans-Regular-webfont.eot +0 -0
  48. package/docs/fonts/OpenSans-Regular-webfont.svg +1831 -0
  49. package/docs/fonts/OpenSans-Regular-webfont.woff +0 -0
  50. package/docs/fonts/OpenSans-Semibold-webfont.eot +0 -0
  51. package/docs/fonts/OpenSans-Semibold-webfont.svg +1830 -0
  52. package/docs/fonts/OpenSans-Semibold-webfont.ttf +0 -0
  53. package/docs/fonts/OpenSans-Semibold-webfont.woff +0 -0
  54. package/docs/fonts/OpenSans-SemiboldItalic-webfont.eot +0 -0
  55. package/docs/fonts/OpenSans-SemiboldItalic-webfont.svg +1830 -0
  56. package/docs/fonts/OpenSans-SemiboldItalic-webfont.ttf +0 -0
  57. package/docs/fonts/OpenSans-SemiboldItalic-webfont.woff +0 -0
  58. package/docs/index.html +66 -0
  59. package/docs/scripts/linenumber.js +25 -0
  60. package/docs/scripts/prettify/Apache-License-2.0.txt +202 -0
  61. package/docs/scripts/prettify/lang-css.js +2 -0
  62. package/docs/scripts/prettify/prettify.js +28 -0
  63. package/docs/styles/jsdoc-default.css +692 -0
  64. package/docs/styles/prettify-jsdoc.css +111 -0
  65. package/docs/styles/prettify-tomorrow.css +132 -0
  66. package/examples/dev_charts/barplot.html +1056 -0
  67. package/examples/dev_charts/boxplot.html +1856 -0
  68. package/examples/dev_charts/boxplot_flipped.svg +727 -0
  69. package/examples/dev_charts/heatmap.html +1217 -0
  70. package/examples/dev_charts/scatterplot/displ.js +18 -0
  71. package/examples/dev_charts/scatterplot/histogram_for_residual.svg +595 -0
  72. package/examples/dev_charts/scatterplot/hwy.js +15 -0
  73. package/examples/dev_charts/scatterplot/layers/point_layer.json +938 -0
  74. package/examples/dev_charts/scatterplot/layers/smooth_layer.json +322 -0
  75. package/examples/dev_charts/scatterplot/point_layer.js +938 -0
  76. package/examples/dev_charts/scatterplot/prediction_array.js +31 -0
  77. package/examples/dev_charts/scatterplot/prediction_array.json +31 -0
  78. package/examples/dev_charts/scatterplot/residual_array.js +29 -0
  79. package/examples/dev_charts/scatterplot/residual_array.json +29 -0
  80. package/examples/dev_charts/scatterplot/scatterplot.svg +1428 -0
  81. package/examples/dev_charts/scatterplot/scatterplot_data.html +2838 -0
  82. package/examples/dev_charts/scatterplot/scatterplot_no_jitter_point_only.svg +1393 -0
  83. package/examples/dev_charts/scatterplot/scatterplot_no_jitter_with_bestfit.svg +1424 -0
  84. package/examples/dev_charts/scatterplot/scatterplot_no_jitter_with_loess_curve.svg +1402 -0
  85. package/examples/dev_charts/scatterplot/smooth_layer.js +322 -0
  86. package/examples/dev_charts/scatterplot.html +4560 -0
  87. package/examples/dodged_bar/dodged_bar.png +0 -0
  88. package/examples/dodged_bar/dodged_bar.svg +198 -0
  89. package/examples/dodged_bar/schema.json +41 -0
  90. package/examples/histogram/histogram_tutorial.svg +482 -0
  91. package/examples/histogram/histogram_tutorial_raw_data.json +362 -0
  92. package/examples/histogram/histogram_user_study.svg +578 -0
  93. package/examples/histogram/histogram_user_study_raw_data.json +362 -0
  94. package/examples/lineplot/lineplot_sample.svg +126 -0
  95. package/examples/lineplot/lineplot_sample_raw_data.json +1 -0
  96. package/examples/lineplot/point+lineplot_sample.svg +700 -0
  97. package/examples/other/audio_oscillator_boxplot.js +95 -0
  98. package/examples/other/barplot_labels.svg +314 -0
  99. package/examples/other/barplot_user_study.svg +313 -0
  100. package/examples/other/boxplot.html +927 -0
  101. package/examples/other/boxplot_data_frame.html +568 -0
  102. package/examples/other/boxplot_label.svg +751 -0
  103. package/examples/other/braille-display_boxplot.js +79 -0
  104. package/examples/other/control_boxplot.js +55 -0
  105. package/examples/other/draft.js +56 -0
  106. package/examples/other/getData.html +400 -0
  107. package/examples/other/getData.js +41 -0
  108. package/examples/other/ggplot_to_svg.R +371 -0
  109. package/examples/other/heatmap.svg +582 -0
  110. package/examples/other/heatmap_label.svg +608 -0
  111. package/examples/other/multiple_barplot.html +2250 -0
  112. package/examples/other/new_scatterplot_user_study_point_layer.json +122 -0
  113. package/examples/other/py_binder_output.html +1167 -0
  114. package/examples/other/scatterplot_label.svg +1429 -0
  115. package/examples/other/seaborn_plot.py +9 -0
  116. package/examples/other/svglite_bar.svg +136 -0
  117. package/examples/other/tutorial_boxplot.svg +727 -0
  118. package/examples/other/tutorial_boxplot_data.json +72 -0
  119. package/examples/other/user_study_boxplot.svg +676 -0
  120. package/examples/stacked_bar/schema.json +41 -0
  121. package/examples/stacked_bar/stack_bar.png +0 -0
  122. package/examples/stacked_bar/stacked_bar.svg +180 -0
  123. package/examples/stacked_normalized_bar/stacked_normalized_bar.png +0 -0
  124. package/examples/stacked_normalized_bar/stacked_normalized_bar.svg +189 -0
  125. package/examples/static/barplot.svg +263 -0
  126. package/examples/static/barplot_diamonds_gridSVG.svg +254 -0
  127. package/examples/static/boxplot.svg +424 -0
  128. package/examples/static/heatmap.svg +373 -0
  129. package/examples/static/heatmap_penguins_table.html +486 -0
  130. package/examples/static/scatterplot.svg +530 -0
  131. package/examples/svglite/task_heatmap.html +802 -0
  132. package/examples/svglite/task_heatmap.svg +111 -0
  133. package/examples/svglite/tutorial_bar.svg +136 -0
  134. package/examples/svglite/tutorial_bar_plot.html +504 -0
  135. package/examples/svglite/tutorial_boxplot.html +1850 -0
  136. package/examples/svglite/tutorial_boxplot.svg +727 -0
  137. package/examples/svglite/tutorial_scatterplot.html +3135 -0
  138. package/examples/svglite/tutorial_scatterplot.svg +311 -0
  139. package/gulpfile.js +49 -0
  140. package/index.html +40 -0
  141. package/jsconfig.json +10 -0
  142. package/jsdoc.json +19 -0
  143. package/package.json +47 -0
  144. package/src/css/styles.css +241 -0
  145. package/src/js/__tests__/audio.test.js +49 -0
  146. package/src/js/__tests__/constants.test.js +622 -0
  147. package/src/js/audio.js +575 -0
  148. package/src/js/barplot.js +254 -0
  149. package/src/js/boxplot.js +682 -0
  150. package/src/js/constants.js +1182 -0
  151. package/src/js/controls.js +3182 -0
  152. package/src/js/display.js +1124 -0
  153. package/src/js/heatmap.js +411 -0
  154. package/src/js/histogram.js +134 -0
  155. package/src/js/init.js +427 -0
  156. package/src/js/lineplot.js +219 -0
  157. package/src/js/scatterplot.js +619 -0
  158. package/src/js/segmented.js +268 -0
  159. package/user_study_pilot/binder_test.html +526 -0
  160. package/user_study_pilot/data/barplot_user_study.svg +492 -0
  161. package/user_study_pilot/data/barplot_user_study_raw_data.json +22 -0
  162. package/user_study_pilot/data/boxplot_tutorial.json +72 -0
  163. package/user_study_pilot/data/boxplot_tutorial_horizontal.svg +727 -0
  164. package/user_study_pilot/data/boxplot_user_study.json +52 -0
  165. package/user_study_pilot/data/boxplot_user_study_vertical.svg +675 -0
  166. package/user_study_pilot/data/boxplot_user_study_vertical_horizontal.svg +676 -0
  167. package/user_study_pilot/data/heatmap_user_study.svg +719 -0
  168. package/user_study_pilot/data/heatmap_user_study_raw_data.json +127 -0
  169. package/user_study_pilot/data/new_barplot_user_study.svg +269 -0
  170. package/user_study_pilot/data/new_heatmap_user_study.svg +367 -0
  171. package/user_study_pilot/data/new_scatterplot_user_study.svg +603 -0
  172. package/user_study_pilot/data/new_scatterplot_user_study_point_layer.json +122 -0
  173. package/user_study_pilot/data/scatterplot_user_study (1).svg +321 -0
  174. package/user_study_pilot/data/scatterplot_user_study.svg +603 -0
  175. package/user_study_pilot/data/scatterplot_user_study_point_layer.json +122 -0
  176. package/user_study_pilot/data/scatterplot_user_study_smooth_layer.json +322 -0
  177. package/user_study_pilot/intro.html +215 -0
  178. package/user_study_pilot/jaws_settings/Chrome.JDF +10 -0
  179. package/user_study_pilot/jaws_settings/Firefox.JDF +10 -0
  180. package/user_study_pilot/jaws_settings/backup_utf8/Chrome.JDF +10 -0
  181. package/user_study_pilot/jaws_settings/backup_utf8/Firefox.JDF +10 -0
  182. package/user_study_pilot/jaws_settings/backup_utf8/msedge.JDF +10 -0
  183. package/user_study_pilot/jaws_settings/msedge.JDF +10 -0
  184. package/user_study_pilot/nvda_settings/chrome.dic +10 -0
  185. package/user_study_pilot/nvda_settings/default.dic +10 -0
  186. package/user_study_pilot/nvda_settings/firefox.dic +10 -0
  187. package/user_study_pilot/nvda_settings/msedge.dic +10 -0
  188. package/user_study_pilot/scatterplot.html +4560 -0
  189. package/user_study_pilot/seaborn_test.html +1059 -0
  190. package/user_study_pilot/svglite_test.html +534 -0
  191. package/user_study_pilot/task1_bar_plot.html +1111 -0
  192. package/user_study_pilot/task2_heatmap.html +1661 -0
  193. package/user_study_pilot/task3_boxplot_horizontal.html +1690 -0
  194. package/user_study_pilot/task3_boxplot_vertical.html +1689 -0
  195. package/user_study_pilot/task4_scatterplot.html +2091 -0
  196. package/user_study_pilot/tutorial1_bar_plot.html +1159 -0
  197. package/user_study_pilot/tutorial2_heatmap.html +1276 -0
  198. package/user_study_pilot/tutorial3_boxplot_horizontal.html +1861 -0
  199. package/user_study_pilot/tutorial3_boxplot_vertical.html +1807 -0
  200. package/user_study_pilot/tutorial4_scatterplot.html +5893 -0
  201. package/user_study_pilot/tutorial5_histogram.html +1553 -0
  202. package/user_study_pilot/tutorial6_lineplot.html +1011 -0
  203. package/user_study_pilot/tutorial7_stacked.html +763 -0
  204. package/user_study_pilot/tutorial8_stacked_normalized.html +796 -0
  205. package/user_study_pilot/tutorial9_dodged_bar.html +831 -0
  206. package/user_study_pilot/voiceover_settings/user_study_VoiceOver Archive.voprefs +573 -0
@@ -0,0 +1,371 @@
1
+ # Load required packages
2
+ library(gridSVG)
3
+ library(svglite)
4
+ library(ggplot2)
5
+ library(gt)
6
+ library(tidymodels)
7
+ library(gapminder)
8
+
9
+
10
+
11
+ # Bar plot sample
12
+ svglite("svglite_bar.svg")
13
+ ggplot(diamonds, aes(cut)) +
14
+ geom_bar() +
15
+ labs(title = "The Number of Diamonds by Cut.", x = "Cut", y = "Count")
16
+
17
+ dev.off()
18
+
19
+ gridSVG::grid.export("barplot_labels.svg")
20
+ dev.off()
21
+
22
+ library(tidyverse)
23
+ library(gapminder)
24
+
25
+ gapminder %>%
26
+ filter(year == 2007) %>%
27
+ group_by(continent) %>%
28
+ summarise(total_pop = sum(pop, rm.na = TRUE)) %>%
29
+ ungroup() %>%
30
+ ggplot(aes(x = continent, y = total_pop)) +
31
+ geom_col() +
32
+ scale_y_continuous(labels = scales::label_number_auto()) +
33
+ labs(title = "The Total Population of Each Continent in 2007.", x = "Continent", y = "Total Population")
34
+
35
+ gridSVG::grid.export("barplot_user_study.svg")
36
+ dev.off()
37
+
38
+
39
+ gapminder %>%
40
+ filter(year == 2007) %>%
41
+ group_by(continent) %>%
42
+ summarise(total_pop = sum(pop, rm.na = TRUE)) %>%
43
+ ungroup() %>%
44
+ jsonlite::write_json("barplot_user_study_raw_data.json")
45
+
46
+ # Box plot sample
47
+ svglite("tutorial_boxplot.svg")
48
+ ggplot(data = mpg, mapping = aes(y = class, x = hwy)) +
49
+ geom_boxplot() +
50
+ labs(title = "Highway Mileage by Car Class.", x = "Highway Mileage", y = "Car Class")
51
+
52
+ dev.off()
53
+
54
+ gridSVG::grid.export("boxplot_label.svg")
55
+ dev.off()
56
+
57
+
58
+ # Extrac boxplot stat values
59
+ mpg %>%
60
+ group_by(class) %>%
61
+ summarise(
62
+ lower_outlier = paste0(boxplot.stats(hwy)$out[boxplot.stats(hwy)$out < boxplot.stats(hwy)$stats[[1]]], collapse = ", "),
63
+ minimum = boxplot.stats(hwy)$stats[[1]],
64
+ Q1 = boxplot.stats(hwy)$stats[[2]],
65
+ median = boxplot.stats(hwy)$stats[[3]],
66
+ Q3 = boxplot.stats(hwy)$stats[[4]],
67
+ maximum = boxplot.stats(hwy)$stats[[5]],
68
+ upper_outlier = paste0(boxplot.stats(hwy)$out[boxplot.stats(hwy)$out > boxplot.stats(hwy)$stats[[5]]], collapse = ", ")
69
+ ) %>%
70
+ jsonlite::write_json("boxplot_data.json")
71
+
72
+ # gt::gt() %>%
73
+ # gtsave("boxplot_data_frame.html")
74
+ left_boxside <- median - Q1
75
+ right_boxside <- Q3 - median
76
+
77
+
78
+ lower_whisker_length <- Q1 - minimum
79
+ upper_whisker_length <- maximum - Q3
80
+ range_vector <- c(lower_whisker_length, left_boxside, right_boxside, upper_whisker_length)
81
+ total_box_length <- sum(range_vector)
82
+ boxplot_ratio <- (range_vector / total_box_length) * 100
83
+ # Drop decimal point
84
+ boxplot_ratio <- round(boxplot_ratio, 0)
85
+
86
+
87
+
88
+
89
+ if (left_boxside == right_boxside) {
90
+ box_brl <- "⠿⠸⠇⠿"
91
+ } else if (left_boxside < right_boxside) {
92
+ relative_ratio <- round((right_boxside / left_boxside), 0)
93
+ box_brl <- "⠿⠸⠇" + strrep("⠿", relative_ratio)
94
+ } else {
95
+ relative_ratio <- round((left_boxside / right_boxside), 0)
96
+ box_brl <- strrep("⠿", relative_ratio) + "⠸⠇⠿"
97
+ }
98
+
99
+ lower_whisker_length <- Q1 - min
100
+ upper_whisker_length <- max - Q3
101
+
102
+ if (lower_whisker_length == upper_whisker_length) {
103
+ "⠒" + box_brl + "⠒"
104
+ } else if (lower_whisker_length < upper_whisker_length) {
105
+ "⠒" + box_brl + "⠒⠒"
106
+ } else {
107
+ "⠒⠒" + box_brl + "⠒"
108
+ }
109
+
110
+ g <- gapminder %>%
111
+ ggplot(aes(x = lifeExp, y = continent)) +
112
+ geom_boxplot() +
113
+ labs(title = "Life Expectancy by Continent.", x = "Continent", y = "Life Expectancy")
114
+
115
+ g
116
+
117
+ gridSVG::grid.export("boxplot_user_study.svg")
118
+ dev.off()
119
+
120
+ layer_data(g, 1) %>%
121
+ gt::gt()
122
+
123
+ # Extract boxplot raw data as a json format:
124
+ gapminder %>%
125
+ group_by(continent) %>%
126
+ summarise(
127
+ lower_outlier = paste0(boxplot.stats(lifeExp)$out[boxplot.stats(lifeExp)$out < boxplot.stats(lifeExp)$stats[[1]]], collapse = ", "),
128
+ minimum = boxplot.stats(lifeExp)$stats[[1]],
129
+ Q1 = boxplot.stats(lifeExp)$stats[[2]],
130
+ median = boxplot.stats(lifeExp)$stats[[3]],
131
+ Q3 = boxplot.stats(lifeExp)$stats[[4]],
132
+ maximum = boxplot.stats(lifeExp)$stats[[5]],
133
+ upper_outlier = paste0(boxplot.stats(lifeExp)$out[boxplot.stats(lifeExp)$out > boxplot.stats(lifeExp)$stats[[5]]], collapse = ", ")
134
+ ) %>%
135
+ jsonlite::write_json("boxplot_user_study_raw_data.json")
136
+
137
+ # Scatter plot sample
138
+ svglite("tutorial_scatterplot.svg")
139
+ ggplot(data = mpg, mapping = aes(x = displ, y = hwy)) +
140
+ # geom_point(position = "jitter") +
141
+ geom_point() +
142
+ geom_smooth(method = "loess", se = FALSE) +
143
+ labs(title = "Highway Mileage by Engine Displacement.", x = "Engine Displacement", y = "Highway Mileage")
144
+
145
+ dev.off()
146
+
147
+ # Save ggplot data to json
148
+ library(tidyverse)
149
+ library(tidymodels)
150
+
151
+ # Best Line
152
+ g <- ggplot(data = mpg, mapping = aes(x = displ, y = hwy)) +
153
+ geom_point() +
154
+ geom_smooth(method = "loess", se = FALSE)
155
+
156
+ point_layer <- layer_data(g, 1) %>%
157
+ select(x, y)
158
+
159
+
160
+ smooth_layer <- layer_data(g, 2) %>%
161
+ select(x, y)
162
+
163
+
164
+ point_layer %>%
165
+ jsonlite::write_json("point_layer.json")
166
+
167
+ smooth_layer %>%
168
+ jsonlite::write_json("smooth_layer.json")
169
+
170
+
171
+ gridSVG::grid.export("scatterplot_label.svg")
172
+ dev.off()
173
+
174
+
175
+
176
+
177
+
178
+ library(tidymodels)
179
+ lm_fit <- linear_reg() %>%
180
+ set_engine("lm") %>%
181
+ fit(hwy ~ displ, data = mpg)
182
+
183
+ fit_tidy <- tidy(lm_fit$fit)
184
+
185
+ fit_tidy %>%
186
+ gt()
187
+
188
+ # Need to learn how sonify package draw a smoothed line
189
+ prediction <- augment(lm_fit$fit)$.fitted
190
+
191
+ resid <- augment(lm_fit$fit)$.resid
192
+
193
+ jsonlite::toJSON(prediction) %>%
194
+ jsonlite::write_json("prediction_array.json")
195
+
196
+
197
+ jsonlite::toJSON(resid) %>%
198
+ jsonlite::write_json("residual_array.json")
199
+
200
+
201
+ lm_df <- augment(lm_fit$fit)
202
+
203
+ lm_df %>%
204
+ ggplot(aes(x = .resid)) +
205
+ geom_histogram()
206
+
207
+
208
+ gridSVG::grid.export("histogram_for_residual.svg")
209
+ dev.off()
210
+
211
+
212
+ # Residual = actual y value - predicted y
213
+
214
+ gridSVG::grid.export("scatterplot.svg")
215
+ dev.off()
216
+
217
+
218
+ # Heat map sample
219
+ ## More example: https://r-charts.com/correlation/heat-map-ggplot2/
220
+ library(palmerpenguins)
221
+ library(dplyr)
222
+
223
+ penguins %>%
224
+ count(island, species, sort = TRUE) %>%
225
+ ggplot(aes(x = island, y = species, fill = n)) +
226
+ geom_tile(color = "black") +
227
+ scale_fill_gradient(low = "#56B1F7", high = "#132B43") +
228
+ coord_fixed() +
229
+ labs(title = "Penguin Species by Island", x = "Island", y = "Species", fill = "Count")
230
+
231
+ gridSVG::grid.export("heatmap_label.svg")
232
+ dev.off()
233
+
234
+
235
+ # heat map for user study
236
+ df <- gapminder %>%
237
+ filter(year >= 1987) %>%
238
+ group_by(year, continent) %>%
239
+ summarise(mean_gdp = round(mean(gdpPercap, rm.na = TRUE), digits = 2)) %>%
240
+ ungroup() %>%
241
+ mutate(year = factor(year))
242
+
243
+ svglite("task_heatmap.svg")
244
+ df %>%
245
+ ggplot(aes(x = year, y = continent, fill = mean_gdp)) +
246
+ scale_fill_gradient(low = "#56B1F7", high = "#132B43") +
247
+ geom_tile(color = "black") +
248
+ coord_fixed() +
249
+ labs(title = "Average GDP per Continent by Year.", x = "Year", y = "Continent", fill = "Average GDP")
250
+
251
+ dev.off()
252
+
253
+ gridSVG::grid.export("heatmap_user_study.svg")
254
+ dev.off()
255
+
256
+ # Scatterplot for user study
257
+
258
+ g <- gapminder %>%
259
+ filter(year == 2007 & continent == "Europe") %>%
260
+ ggplot(aes(x = gdpPercap, y = lifeExp)) +
261
+ geom_point() +
262
+ geom_smooth(method = "loess", se = FALSE) +
263
+ scale_x_log10(labels = scales::comma) +
264
+ labs(title = "The Relationship between GDP and Life Expectancy of European Countries in 2007.", x = "GDP (log10 transformed)", y = "Life Expectancy")
265
+
266
+ g
267
+
268
+ gridSVG::grid.export("scatterplot_user_study.svg")
269
+ dev.off()
270
+
271
+ point_layer <- layer_data(g, 1) %>%
272
+ select(x, y)
273
+
274
+ # Yu Jun said the above did not work so I am extracting from the original data directly:
275
+ gapminder %>%
276
+ filter(year == 2007 & continent == "Europe") %>%
277
+ select(gdpPercap, lifeExp) %>%
278
+ # mutate(gdpPercap = log10(gdpPercap)) %>%
279
+ rename(x = gdpPercap, y = lifeExp) %>%
280
+ jsonlite::write_json("new_scatterplot_user_study_point_layer.json")
281
+
282
+ smooth_layer <- layer_data(g, 2) %>%
283
+ select(x, y)
284
+
285
+
286
+ point_layer %>%
287
+ jsonlite::write_json("scatterplot_user_study_point_layer.json")
288
+
289
+ smooth_layer %>%
290
+ jsonlite::write_json("scatterplot_user_study_smooth_layer.json")
291
+
292
+
293
+ # Histogram
294
+ ## Tutorial
295
+ # Create a histogram from mpg data
296
+ g <- ggplot(data = mpg, mapping = aes(x = displ)) +
297
+ geom_histogram(bins = 20) +
298
+ labs(title = "Distribution of Engine Displacement", x = "Displacement", y = "Count")
299
+
300
+ g
301
+
302
+ gridSVG::grid.export("histogram_tutorial.svg")
303
+ dev.off()
304
+
305
+ layer_data(g, 1) %>%
306
+ jsonlite::write_json("histogram_tutorial_raw_data.json")
307
+
308
+
309
+ # Create histogram from gampminder package
310
+ g <- gapminder %>%
311
+ filter(year == 2007) %>%
312
+ ggplot(aes(x = lifeExp)) +
313
+ geom_histogram(bins = 20) +
314
+ labs(title = "Distribution of Life Expectancy in 2007", x = "Life Expectancy", y = "Count")
315
+
316
+ g
317
+
318
+ gridSVG::grid.export("histogram_user_study.svg")
319
+ dev.off()
320
+
321
+ layer_data(g, 1) %>%
322
+ jsonlite::write_json("histogram_user_study_raw_data.json")
323
+
324
+
325
+ # Lineplot
326
+ ## Tutorial
327
+ ### Create a lineplot from gapminder data
328
+ g <- gapminder %>%
329
+ filter(continent == "Europe") %>%
330
+ ggplot(aes(x = year, y = lifeExp)) +
331
+ geom_line() +
332
+ labs(title = "Life Expectancy in Europe", x = "Year", y = "Life Expectancy")
333
+
334
+ g
335
+
336
+ gridSVG::grid.export("lineplot_user_study.svg")
337
+ dev.off()
338
+
339
+ layer_data(g, 1) %>%
340
+ jsonlite::write_json("lineplot_user_study_raw_data.json")
341
+
342
+ # Stacked bar plot
343
+ library(tidyverse)
344
+
345
+
346
+ # create segmented bar plot
347
+ svglite::svglite("stacked_normalized_bar.svg")
348
+
349
+ g <- ggplot(mpg, aes(x = class, fill = drv)) +
350
+ geom_bar(position = "fill") +
351
+ labs(
352
+ title = "Bar Plot", x = "Class", y = "Count", fill = "Drive",
353
+ subtitle = "Segmented bar plot of the number of cars in each class by drive type", caption = "Source: mpg dataset from ggplot2 package"
354
+ )
355
+
356
+ # Extract data
357
+ layer_data(g, 1) %>%
358
+ gt::gt()
359
+
360
+ dev.off()
361
+
362
+ jsonlite::write_json("stacked_bar_raw_data.json")
363
+ BrailleR::VI(g)
364
+ g
365
+
366
+ mpg %>%
367
+ count(class, drv) %>%
368
+ rename(x = class, fill = drv, y = n) %>%
369
+ # gt::gt()
370
+ # Save it ss a json file
371
+ jsonlite::write_json("stacked_bar_raw_data.json")