簡體   English   中英

在 R 中繪制百分比堆積條形圖

[英]plotting a percentage stacked bar chart in R

所以我有一個簡化形式的數據框,看起來像這樣。

| 期間| 機管局|

| 第一天 | 1 |

| 第一天 | 0 |

| 第一天 | 2 |

| 第一天 | 2 |

| 第 2 天 | 0 |

| 第 2 天 | 1 |

| 第 3 天 | 1 |

| 第 3 天 | 2 |

| 第 3 天 | 0 |。

.

.

.

| 第 99 天 | 0 |

現在我想 plot 繪制“AA”的圖表,其中“周期”是 x 軸,“0-100”是 y 軸,繪制每個“0”、“1”、“2”的總頻率百分比,如百分比堆積條形圖。

我為單列 AA 嘗試了類似的方法,但它對我想要的沒有幫助。

library("ggplot2")
library("dplyr")
Count=1
data <- aggregate(Count ~ ., data, sum)
data <- group_by(data, Period) %>%
mutate(percent = Count / sum(Count)) %>%
as.data.frame()

ggplot(data,
aes(x = Period,
y = percent,
fill = AA)) +
geom_bar(position = "fill", stat = "identity")

假設您的數據集是這樣的:

data <- data.frame(period = rep(paste(rep("Day",5) , 1:5 , sep="") , each=3) , 
                   AA = sample(0:2 , 15 , replace=T),
                   BB = sample(0:2 , 15 , replace=T),
                   CC = sample(0:2 , 15 , replace=T))

然后你可以把它變成你需要的形狀。 在這里,我從句點中提取數字,以便稍后制作一個很好的數字軸。

data <- data %>%  group_by(period) %>% 
  summarise(across(1:3 , sum)) %>% 
  gather(class, value , 2:4) %>% 
  mutate(period = str_extract(period , "\\d+"))

然后你可以像這樣得到你的圖表。 如果您希望它作為條形圖而不是柱形圖,請添加+ coord_flip()

ggplot(data , aes(period , value , fill=class))+geom_col(position = "fill")

如果您需要在繪圖之前計算百分比,那么...

data <- data %>%  group_by(period) %>% 
      summarise(across(1:3 , sum)) %>% 
      gather(class, value , 2:4) %>% 
      group_by(period) %>% 
      mutate(value = value/sum(value)) %>% 
      mutate(period = str_extract(period , "\\d+"))

我認為這將解決您的問題

df <- data.frame(
  stringsAsFactors = FALSE,
            Period = c("Day1","Day1","Day1","Day1",
                       "Day2","Day2","Day3","Day3","Day3","Day3","Day4",
                       "Day4","Day4","Day4"),
                AA = c(1L, 0L, 2L, 2L, 0L, 1L, 1L, 2L, 0L, 0L, 1L, 2L, 2L, 2L)
)

suppressMessages(library(tidyverse))

df %>% count(Period, AA) %>%
  ggplot() +
  geom_col(aes(x= Period, y = n, fill= as.character(AA)), position = 'fill')

代表 package (v2.0.0) 於 2021 年 5 月 1 日創建

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM