我想創建一個條形圖,顯示多年來按性別在農業部門作業的百分比。
我的資料框如下所示:
agri_work <- c(0, 1)
Male_ratio_02 <- c(25.72, 23.13)
Female_ratio_02 <- c(25.77, 26.58)
Male_ratio_04 <- c(28.78, 20.36)
Female_ratio_04 <- c(27.92, 22.95)
agrisum <- data.frame(agri_work, Male_ratio_02, Female_ratio_02, Male_ratio_04, Female_ratio_04)
我嘗試了以下代碼:
ggplot(agrisum)
geom_col(aes(x = Male_ratio_02, y = agri_work, fill = agri_work), stat = "identity")
geom_col(aes(x = Female_ratio_02, y = agri_work, fill = agri_work), stat = "identity")

然而,我得到的圖表并沒有告訴我有哪些女性/男性人口從事農業作業。
uj5u.com熱心網友回復:
目前您的資料是寬格式的。如果不重塑,將很難繪制它。
您當前的資料如下所示:
agrisum
#> agri_work Male_ratio_02 Female_ratio_02 Male_ratio_04 Female_ratio_04
#> 1 0 25.72 25.77 28.78 27.92
#> 2 1 23.13 26.58 20.36 22.95
為了輕松繪制此圖,我們應該每行有一個觀察值,每列有一個變數。目前,性別和年份分布在列之間。我們可以使用 tidyverse 來解決這個dplyr問題tidyr:
library(dplyr)
library(tidyr)
agrisum <- agrisum %>%
pivot_longer(2:5) %>%
separate(name, sep = "_", into = c("Gender", NA, "Year")) %>%
mutate(Work = c("Agricultural", "Non-Agricultural")[agri_work 1])
agrisum
#> # A tibble: 8 x 5
#> agri_work Gender Year value Work
#> <dbl> <chr> <chr> <dbl> <chr>
#> 1 0 Male 02 25.7 Agricultural
#> 2 0 Female 02 25.8 Agricultural
#> 3 0 Male 04 28.8 Agricultural
#> 4 0 Female 04 27.9 Agricultural
#> 5 1 Male 02 23.1 Non-Agricultural
#> 6 1 Female 02 26.6 Non-Agricultural
#> 7 1 Male 04 20.4 Non-Agricultural
#> 8 1 Female 04 23.0 Non-Agricultural
所以現在我們可以這樣做:
ggplot(agrisum, aes(Work, value, fill = Gender))
geom_col(position = position_dodge(width = 0.8), width = 0.6,
color = "black", size = 0.1)
scale_fill_manual(values = c(Female = "orange", Male = "deepskyblue3"))
facet_grid(. ~ paste0("20", Year))
theme_bw()
theme(strip.background = element_blank(),
panel.border = element_blank(),
axis.line.x = element_line())

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