Vizualizace skládaný sloupcový graf v podobě Jonathana a. Schwabish (JEP 2014)

0

Otázka

Snažím se děj následující údaje (df_input) ve formátu skládaný sloupcový graf, kde můžeme vidět také v průběhu času měnit po řádku. Nějaký nápad, jak to udělat?

df_input <- data.frame( Year= c(2010,2010,2010,2010,2020,2020,2020,2020), village= c("A","B","C","D","A","B","C","D"), share = c(40,30,20,10,30,30,25,15)) 

df_input_2 <- data.frame( Year= c(2010,2010,2010,2010,2015,2015,2015,2015,2020,2020,2020,2020), village= c("A","B","C","D","A","B","C","D","A","B","C","D"), share = c(40,30,20,10,30,30,25,15,20,10,30,40))    

Example

1

Nejlepší odpověď

3

Jednou z možností, jak dosáhnout, že by se prostřednictvím geom_col a geom_line. Pro geom_line máte na skupiny podle proměnné mapované na fillnastavte pozici "stack" a nastavit start/koncové polohy na účet pro šířku mříže. Navíc budete muset ručně nastavit orientation pro geom_line k y:

library(ggplot2)


width <- .6 # Bar width

ggplot(df_input, aes(share, factor(Year), fill = village)) +
  geom_col(width = width) +
  geom_line(aes(x = share, 
                y = as.numeric(factor(Year)) + ifelse(Year == 2020, -width / 2, width / 2), 
                group = village), position = "stack", orientation = "y")

UPRAVIT S více než dva roky, než se věci trochu složitější. V tom případě bych přepnout na geom_segment`. Navíc musíme udělat nějaké údaje hádky k přípravě dat pro použití s geom_segment:

library(ggplot2)
library(dplyr)

# Example data with three years
df_input_2 <- data.frame( Year= c(2010,2010,2010,2010,2015,2015,2015,2015,2020,2020,2020,2020), village= c("A","B","C","D","A","B","C","D","A","B","C","D"), share = c(40,30,20,10,30,30,25,15,20,10,30,40))    

width = .6

# Data wrangling
df_input_2 <- df_input_2 %>% 
  group_by(Year) %>% 
  arrange(desc(village)) %>% 
  mutate(share_cum = cumsum(share)) %>% 
  group_by(village) %>% 
  arrange(Year) %>% 
  mutate(Year = factor(Year),
         Year_lead = lead(Year), share_cum_lead = lead(share_cum))

ggplot(df_input_2, aes(share, factor(Year), fill = village)) +
  geom_col(width = width) +
  geom_segment(aes(x = share_cum, xend = share_cum_lead, y = as.numeric(Year) + width / 2, yend = as.numeric(Year_lead) - width / 2, group = village))
#> Warning: Removed 4 rows containing missing values (geom_segment).

2021-11-20 12:58:59

To je opravdu dobrý :) měl jsem strávil více času na ggplot2 Jsem toho litovat!
Anoushiravan R

Díky moc, @stefan. Jak se o pokud máme více let? (Přidal jsem df_input_2) To je opravdu působivé, díky moc.
Fuser

Hm. V případě, že se věci trochu složitější a já osobně bych přejít na geom_segment. Viz můj edit na to, jak dosáhnout, že.
stefan

V jiných jazycích

Tato stránka je v jiných jazycích

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................