(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 $ speciesAdelie, 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 n1 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 🙂
