Loading Libraries

library("see")
library("dplyr")
library("ggplot2")

# Exp for plotting data using subset of English data
library(languageR)
English_df <- as.data.frame(english)
English_df_subset <- English_df %>%
  filter(WordCategory %in% c("N", "V")) %>%
  group_by(WordCategory) %>%
  slice_sample(n = 20) %>%
  ungroup()
#View(English_df)

Specialized Graphs

Half-violin Half-dot plot

https://easystats.github.io/see/reference/geom_violindot.html

p1 <- ggplot(English_df_subset, aes(x = WordCategory, y = RTlexdec, fill = WordCategory)) +
  geom_violindot(size_dots = 0.3) +
  scale_fill_material_d()

p1

Pool ball Points

https://easystats.github.io/see/reference/geom_poolpoint.html

ggplot(English_df_subset, aes(RTlexdec, RTnaming, colour = WordCategory)) +
  geom_poolpoint(label = row.names(English_df_subset)) +
  scale_color_flat_d() +
  theme_modern()

Radar Chart

https://easystats.github.io/see/reference/coord_radar.html

library(datawizard)  # for data_to_long() for Radar format

# Prepping data
radar_data <- English_df %>%
  group_by(AgeSubject) %>%
  summarise(
    RTlexdec = mean(RTlexdec, na.rm = TRUE),
    RTnaming = mean(RTnaming, na.rm = TRUE),
    CorrectLexdec = mean(CorrectLexdec, na.rm = TRUE)/5  # /5 for scaling
  )

radar_long <- data_to_long(
  radar_data,
  select = c("RTlexdec", "RTnaming", "CorrectLexdec")
)


ggplot(radar_long, aes(x = name, y = value, color = AgeSubject, group = AgeSubject)) +
  geom_polygon(fill = NA, linewidth = 2) +
  coord_radar(start = -pi / 3) # rotate

Layouts, Colors, and Themes

Patchwork (meshing plots together)

https://easystats.github.io/see/reference/plots.html

p1 <- ggplot(English_df_subset, aes(x = WordCategory, y = RTlexdec, fill = WordCategory)) +
  geom_violindot(size_dots = 0.3) +
  scale_fill_material_d()

p2 <- ggplot(English_df_subset, aes(x = WordCategory, y = RTlexdec, fill = WordCategory)) +
  geom_boxplot() +
  scale_fill_material_d()

p3 <- ggplot(English_df_subset, aes(x = WordCategory, y = RTlexdec, fill = WordCategory)) +
  geom_point2() +
  scale_color_material(discrete = FALSE)

# Fancy way to combine plot (can add titles and labels)
plots(p1, p2, p3,
  n_columns = 2,
  tags = c("Fig. 1", "Fig. 2", "Fig. 3"), # Adding titles to each plot
  title = "Example plots" # adding title
)

# Other ways to combine using equations
# / is under
# + is next to each other
(p1 + p2) / p3

Themes

Available themes:

  • theme_azurelight

  • theme_lucid

  • theme_blackboard

  • theme_modern

  • theme_radar

  • theme_abyss

# theme_azurelight.R
# theme_blackboard.R
# theme_lucid.R
# theme_modern.R
# theme_radar.R

p1 + theme_blackboard()


p1 + theme_abyss()


p1 + theme_modern()

Color Scales

https://easystats.github.io/see/articles/seecolorscales.html

English_df$random_group <- as.factor(sample(1:5, size = nrow(English_df), replace = TRUE))

pizza <- ggplot(English_df, aes(RTlexdec, RTnaming, colour = random_group)) +
  geom_point2(size = 2.5) +
  # Color scale pizza
  scale_color_pizza() +
  theme(
    # Can extract hex from theme color
    panel.background = element_rect(fill = pizza_colors("crust")), 
    plot.background = element_rect(fill = pizza_colors("crust")))

pizza

LS0tCnRpdGxlOiAiU2VlIFBhY2thZ2UgRGVtbyIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKIyMgTG9hZGluZyBMaWJyYXJpZXMKCmBgYHtyfQpsaWJyYXJ5KCJzZWUiKQpsaWJyYXJ5KCJkcGx5ciIpCmxpYnJhcnkoImdncGxvdDIiKQoKIyBFeHAgZm9yIHBsb3R0aW5nIGRhdGEgdXNpbmcgc3Vic2V0IG9mIEVuZ2xpc2ggZGF0YQpsaWJyYXJ5KGxhbmd1YWdlUikKRW5nbGlzaF9kZiA8LSBhcy5kYXRhLmZyYW1lKGVuZ2xpc2gpCkVuZ2xpc2hfZGZfc3Vic2V0IDwtIEVuZ2xpc2hfZGYgJT4lCiAgZmlsdGVyKFdvcmRDYXRlZ29yeSAlaW4lIGMoIk4iLCAiViIpKSAlPiUKICBncm91cF9ieShXb3JkQ2F0ZWdvcnkpICU+JQogIHNsaWNlX3NhbXBsZShuID0gMjApICU+JQogIHVuZ3JvdXAoKQojVmlldyhFbmdsaXNoX2RmKQpgYGAKCiMjIFNwZWNpYWxpemVkIEdyYXBocwoKIyMjIEhhbGYtdmlvbGluIEhhbGYtZG90IHBsb3QKCjxodHRwczovL2Vhc3lzdGF0cy5naXRodWIuaW8vc2VlL3JlZmVyZW5jZS9nZW9tX3Zpb2xpbmRvdC5odG1sPgoKYGBge3J9CnAxIDwtIGdncGxvdChFbmdsaXNoX2RmX3N1YnNldCwgYWVzKHggPSBXb3JkQ2F0ZWdvcnksIHkgPSBSVGxleGRlYywgZmlsbCA9IFdvcmRDYXRlZ29yeSkpICsKICBnZW9tX3Zpb2xpbmRvdChzaXplX2RvdHMgPSAwLjMpICsKICBzY2FsZV9maWxsX21hdGVyaWFsX2QoKQoKcDEKYGBgCgojIyMgUG9vbCBiYWxsIFBvaW50cwoKPGh0dHBzOi8vZWFzeXN0YXRzLmdpdGh1Yi5pby9zZWUvcmVmZXJlbmNlL2dlb21fcG9vbHBvaW50Lmh0bWw+CgpgYGB7cn0KZ2dwbG90KEVuZ2xpc2hfZGZfc3Vic2V0LCBhZXMoUlRsZXhkZWMsIFJUbmFtaW5nLCBjb2xvdXIgPSBXb3JkQ2F0ZWdvcnkpKSArCiAgZ2VvbV9wb29scG9pbnQobGFiZWwgPSByb3cubmFtZXMoRW5nbGlzaF9kZl9zdWJzZXQpKSArCiAgc2NhbGVfY29sb3JfZmxhdF9kKCkgKwogIHRoZW1lX21vZGVybigpCmBgYAoKIyMjIFJhZGFyIENoYXJ0Cgo8aHR0cHM6Ly9lYXN5c3RhdHMuZ2l0aHViLmlvL3NlZS9yZWZlcmVuY2UvY29vcmRfcmFkYXIuaHRtbD4KCmBgYHtyfQpsaWJyYXJ5KGRhdGF3aXphcmQpICAjIGZvciBkYXRhX3RvX2xvbmcoKSBmb3IgUmFkYXIgZm9ybWF0CgojIFByZXBwaW5nIGRhdGEKcmFkYXJfZGF0YSA8LSBFbmdsaXNoX2RmICU+JQogIGdyb3VwX2J5KEFnZVN1YmplY3QpICU+JQogIHN1bW1hcmlzZSgKICAgIFJUbGV4ZGVjID0gbWVhbihSVGxleGRlYywgbmEucm0gPSBUUlVFKSwKICAgIFJUbmFtaW5nID0gbWVhbihSVG5hbWluZywgbmEucm0gPSBUUlVFKSwKICAgIENvcnJlY3RMZXhkZWMgPSBtZWFuKENvcnJlY3RMZXhkZWMsIG5hLnJtID0gVFJVRSkvNSAgIyAvNSBmb3Igc2NhbGluZwogICkKCnJhZGFyX2xvbmcgPC0gZGF0YV90b19sb25nKAogIHJhZGFyX2RhdGEsCiAgc2VsZWN0ID0gYygiUlRsZXhkZWMiLCAiUlRuYW1pbmciLCAiQ29ycmVjdExleGRlYyIpCikKCgpnZ3Bsb3QocmFkYXJfbG9uZywgYWVzKHggPSBuYW1lLCB5ID0gdmFsdWUsIGNvbG9yID0gQWdlU3ViamVjdCwgZ3JvdXAgPSBBZ2VTdWJqZWN0KSkgKwogIGdlb21fcG9seWdvbihmaWxsID0gTkEsIGxpbmV3aWR0aCA9IDIpICsKICBjb29yZF9yYWRhcihzdGFydCA9IC1waSAvIDMpICMgcm90YXRlCgpgYGAKCiMjIExheW91dHMsIENvbG9ycywgYW5kIFRoZW1lcwoKIyMjIFBhdGNod29yayAobWVzaGluZyBwbG90cyB0b2dldGhlcikKCjxodHRwczovL2Vhc3lzdGF0cy5naXRodWIuaW8vc2VlL3JlZmVyZW5jZS9wbG90cy5odG1sPgoKYGBge3J9CnAxIDwtIGdncGxvdChFbmdsaXNoX2RmX3N1YnNldCwgYWVzKHggPSBXb3JkQ2F0ZWdvcnksIHkgPSBSVGxleGRlYywgZmlsbCA9IFdvcmRDYXRlZ29yeSkpICsKICBnZW9tX3Zpb2xpbmRvdChzaXplX2RvdHMgPSAwLjMpICsKICBzY2FsZV9maWxsX21hdGVyaWFsX2QoKQoKcDIgPC0gZ2dwbG90KEVuZ2xpc2hfZGZfc3Vic2V0LCBhZXMoeCA9IFdvcmRDYXRlZ29yeSwgeSA9IFJUbGV4ZGVjLCBmaWxsID0gV29yZENhdGVnb3J5KSkgKwogIGdlb21fYm94cGxvdCgpICsKICBzY2FsZV9maWxsX21hdGVyaWFsX2QoKQoKcDMgPC0gZ2dwbG90KEVuZ2xpc2hfZGZfc3Vic2V0LCBhZXMoeCA9IFdvcmRDYXRlZ29yeSwgeSA9IFJUbGV4ZGVjLCBmaWxsID0gV29yZENhdGVnb3J5KSkgKwogIGdlb21fcG9pbnQyKCkgKwogIHNjYWxlX2NvbG9yX21hdGVyaWFsKGRpc2NyZXRlID0gRkFMU0UpCgojIEZhbmN5IHdheSB0byBjb21iaW5lIHBsb3QgKGNhbiBhZGQgdGl0bGVzIGFuZCBsYWJlbHMpCnBsb3RzKHAxLCBwMiwgcDMsCiAgbl9jb2x1bW5zID0gMiwKICB0YWdzID0gYygiRmlnLiAxIiwgIkZpZy4gMiIsICJGaWcuIDMiKSwgIyBBZGRpbmcgdGl0bGVzIHRvIGVhY2ggcGxvdAogIHRpdGxlID0gIkV4YW1wbGUgcGxvdHMiICMgYWRkaW5nIHRpdGxlCikKYGBgCgpgYGB7cn0KIyBPdGhlciB3YXlzIHRvIGNvbWJpbmUgdXNpbmcgZXF1YXRpb25zCiMgLyBpcyB1bmRlcgojICsgaXMgbmV4dCB0byBlYWNoIG90aGVyCihwMSArIHAyKSAvIHAzCgpgYGAKCiMjIyBUaGVtZXMKCkF2YWlsYWJsZSB0aGVtZXM6CgotICAgdGhlbWVfYXp1cmVsaWdodAoKLSAgIHRoZW1lX2x1Y2lkCgotICAgdGhlbWVfYmxhY2tib2FyZAoKLSAgIHRoZW1lX21vZGVybgoKLSAgIHRoZW1lX3JhZGFyCgotICAgdGhlbWVfYWJ5c3MKCmBgYHtyfQojIHRoZW1lX2F6dXJlbGlnaHQuUgojIHRoZW1lX2JsYWNrYm9hcmQuUgojIHRoZW1lX2x1Y2lkLlIKIyB0aGVtZV9tb2Rlcm4uUgojIHRoZW1lX3JhZGFyLlIKCnAxICsgdGhlbWVfYmxhY2tib2FyZCgpCgpwMSArIHRoZW1lX2FieXNzKCkKCnAxICsgdGhlbWVfbW9kZXJuKCkKYGBgCgojIyMgQ29sb3IgU2NhbGVzCgo8aHR0cHM6Ly9lYXN5c3RhdHMuZ2l0aHViLmlvL3NlZS9hcnRpY2xlcy9zZWVjb2xvcnNjYWxlcy5odG1sPgoKYGBge3J9CkVuZ2xpc2hfZGYkcmFuZG9tX2dyb3VwIDwtIGFzLmZhY3RvcihzYW1wbGUoMTo1LCBzaXplID0gbnJvdyhFbmdsaXNoX2RmKSwgcmVwbGFjZSA9IFRSVUUpKQoKcGl6emEgPC0gZ2dwbG90KEVuZ2xpc2hfZGYsIGFlcyhSVGxleGRlYywgUlRuYW1pbmcsIGNvbG91ciA9IHJhbmRvbV9ncm91cCkpICsKICBnZW9tX3BvaW50MihzaXplID0gMi41KSArCiAgIyBDb2xvciBzY2FsZSBwaXp6YQogIHNjYWxlX2NvbG9yX3BpenphKCkgKwogIHRoZW1lKAogICAgIyBDYW4gZXh0cmFjdCBoZXggZnJvbSB0aGVtZSBjb2xvcgogICAgcGFuZWwuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0gcGl6emFfY29sb3JzKCJjcnVzdCIpKSwgCiAgICBwbG90LmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoZmlsbCA9IHBpenphX2NvbG9ycygiY3J1c3QiKSkpCgpwaXp6YQpgYGAKCiFbXShEb3dubG9hZHMvU2NyZWVuc2hvdCUyMDIwMjUtMDQtMTglMjBhdCUyMDQuMDUuMjglMjBBTS5wbmcpCg==