Roje pszczół zamiast chmur punktów

Przy większej liczbie obserwacji wykresy punktowe bywają nieczytelne. Losowe przesuwanie punktów (geom_point(position = “jitter”)) w ggplot2 nie wygląda zbyt estetycznie, poza tym punkty cały czas mogą na siebie nachodzić. Prostym rozwiązaniem jest zastosowanie pakietu ggbeeswarm, który zawiera kilka geometrii tworzących estetyczne i informatywne wykresy punktowe.

Funkcjonalność pakietu beeswarm najlepiej zaprezentować na przykładzie - w tym przypadku dochodzie netto mieszkańców dużych miast (powyżej 500 tys. mieszkanców) w województwach Mazowieckim i Dolnośląskim.

library(dplyr)
library(haven)
library(ggplot2)
library(ggbeeswarm)

# Skąd wziąć dane z diagnozy? Sprawdź tutaj:
# https://stwur.github.io/STWUR//articles/przygotowania/
load("./Diagnoza_dane-master/osoby.RData")
dochod_df <- data.frame(woj = as_factor(osoby[[74]]),
           dochod = osoby[[646]],
           miasto = osoby[[75]]) %>%
  # wybieramy tylko osoby ktore maja podane informacje na temat dochodu i województwa
  filter(!(is.na(woj) | is.na(dochod))) %>% 
  # tylko osoby o dochodzie kodowanym zmiennymi większymi niż 0
  filter(dochod > 0) %>% 
  mutate(dochod = as.numeric(dochod)) %>% 
  # tylko interesujące nas województwa
  filter(woj %in% c("Dolnośląskie", "Mazowieckie")) %>%
  # tylko największe miasta
  filter(miasto == 1)

# wykresy pudełkowe w tym przypadku nam nie wystarczają, chcemy zobaczyć poszczególne punkty
ggplot(dochod_df, aes(x = woj, y = dochod)) +
  geom_boxplot() 

plot of chunk beeswarm

# przy zwykłym wykresie punkty nachodzą na siebie
ggplot(dochod_df, aes(x = woj, y = dochod)) +
  geom_point() 

plot of chunk beeswarm

# losowe umiejscowienie punktów jest mało informatywne, punkty wciąż czasami nachodzą na siebie
ggplot(dochod_df, aes(x = woj, y = dochod)) +
  geom_point(position = "jitter") 

plot of chunk beeswarm

# pseudolosowe umiejscowienie punktów jest dużo bardziej przejrzyste
ggplot(dochod_df, aes(x = woj, y = dochod)) +
  geom_quasirandom() 

plot of chunk beeswarm

# rój pszczół to alternatywny sposób pseudolosowego umiejscowienia punktów
ggplot(dochod_df, aes(x = woj, y = dochod)) +
  geom_beeswarm() 

plot of chunk beeswarm