我正在嘗試以堆疊條形圖的格式繪制以下資料 (df_input),我們還可以在其中逐行查看隨時間的變化。知道怎么做嗎?
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))

uj5u.com熱心網友回復:
實作這一目標的一種選擇是通過 ageom_col和 a geom_line。對于geom_line您必須按映射到的變數進行分組fill,將位置設定為“堆疊”并調整開始/結束位置以考慮條的寬度。此外,您必須手動設定orientation為geom_line到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")

編輯兩年多來,事情變得有點棘手。在這種情況下,我會切換到“geom_segment”。此外,我們必須進行一些資料整理以準備用于“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).

轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/364234.html
