Cum faceți o histogramă cu puncte sau pătrate de dimensiuni egale pentru fiecare observație și le colorați printr -o altă variabilă

URMĂREȘTE-NE
16,065FaniÎmi place
1,142CititoriConectați-vă

(Acest articol a fost publicat pentru prima dată pe pacha.dev/blogși a contribuit cu drag la R-Bloggers). (Puteți raporta problema despre conținutul de pe această pagină aici)


Doriți să vă împărtășiți conținutul pe R-Bloggers? Faceți clic aici dacă aveți un blog sau aici dacă nu.

Din cauza întârzierilor cu plata bursei mele, dacă această postare vă este utilă, vă cer cu drag o donație minimă pentru a -mi cumpăra o cafea care va fi folosită pentru a continua eforturile mele open source. Dacă aveți nevoie de un pachet R sau un tablou de bord strălucitor pentru echipa dvs., puteți să -mi trimiteți un e -mail sau să întrebați pe Fiverr. Explicația completă este aici: un mesaj personal de la un contribuabil open source

Îmi puteți trimite întrebări pentru blog folosind acest formular.

Am primit această întrebare de la un cititor: Cum faceți o histogramă cu puncte sau pătrate de dimensiuni egale pentru fiecare observație și le colorați printr -o altă variabilă?

Voi folosi setul de date Palmer’s Pinguins pentru a răspunde la acest lucru, care conține observații despre specia și masa corporală pentru un eșantion de pinguini:

library(palmerpenguins)
library(dplyr)

glimpse(penguins)
Rows: 344
Columns: 8
$ species            Adelie, Adelie, Adelie, Adelie, Adelie, Adelie, Adel…
$ island             Torgersen, Torgersen, Torgersen, Torgersen, Torgerse…
$ bill_length_mm     39.1, 39.5, 40.3, NA, 36.7, 39.3, 38.9, 39.2, 34.1, …
$ bill_depth_mm      18.7, 17.4, 18.0, NA, 19.3, 20.6, 17.8, 19.6, 18.1, …
$ flipper_length_mm  181, 186, 195, NA, 193, 190, 181, 195, 193, 190, 186…
$ body_mass_g        3750, 3800, 3250, NA, 3450, 3650, 3625, 4675, 3475, …
$ sex                male, female, female, NA, female, male, female, male…
$ year               2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007…

Pentru a utiliza pătrate, o posibilitate este de a crea o variabilă de masă corporală discretă după intervale și de a număra după specii și intervale:

library(tidyr)
library(ggplot2)
library(tintin)

# Create quantile-based bins (wider bins)
n_bins <- 5  # number of quantile bins

d <- penguins %>%
  drop_na(body_mass_g, species) %>%
  mutate(body_mass_d = cut(body_mass_g, breaks = 4, dig.lab = 6)) %>%
  group_by(species, body_mass_d) %>%
  count()

d
# A tibble: 9 × 3
# Groups:   species, body_mass_d (9)
  species   body_mass_d       n
                
1 Adelie    (2696.4,3600)    71
2 Adelie    (3600,4500)      73
3 Adelie    (4500,5400)       7
4 Chinstrap (2696.4,3600)    26
5 Chinstrap (3600,4500)      40
6 Chinstrap (4500,5400)       2
7 Gentoo    (3600,4500)      17
8 Gentoo    (4500,5400)      72
9 Gentoo    (5400,6303.6)    34

Acum pot crea o diagramă de coloană în stil Tetris în care fiecare pătrat reprezintă 5 pinguini:

square_size <- 5  # square = 5 observations

d_squares <- d %>%
  mutate(
    full_squares = n %/% square_size,          # number of full squares
    remainder = n %% square_size,              # remaining observations
    partial_height = remainder / square_size   # height of partial square
  )

# Create full squares
full_squares_df <- d_squares %>%
  filter(full_squares > 0) %>%
  uncount(full_squares) %>%
  group_by(species, body_mass_d) %>%
  mutate(square_id = row_number() - 1,
         y = square_id + 0.5,
         height = 1,
         square_type = "full") %>%
  ungroup()

# Create partial squares
partial_squares_df <- d_squares %>%
  filter(remainder > 0) %>%
  mutate(square_id = full_squares,
         y = full_squares + partial_height/2,
         height = partial_height,
         square_type = "partial")

# Combine both
d_squares <- bind_rows(full_squares_df, partial_squares_df)

# Create Tetris-style column plot with grouped squares
ggplot(d_squares, aes(x = body_mass_d, y = y, fill = species)) +
  geom_tile(aes(height = height), width = 0.9, color = "white", linewidth = 0.5) +
  scale_x_discrete(name = "Body mass intervals") +
  scale_y_continuous(name = paste0("Count (each full square = ", square_size, " penguins)"), 
                     expand = expansion(add = 0)) +
  scale_fill_tintin_d(option = "the black island", direction = -1) +
  labs(title = "Column plot with grouped squares") +
  facet_wrap(~species) +
  theme_minimal(base_size = 13) +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

Sper că acest lucru este util 🙂

Dominic Botezariu
Dominic Botezariuhttps://www.noobz.ro/
Creator de site și redactor-șef.

Cele mai noi știri

Pe același subiect

LĂSAȚI UN MESAJ

Vă rugăm să introduceți comentariul dvs.!
Introduceți aici numele dvs.