簡體   English   中英

ggplot堆積條plot與百分比標簽

[英]Ggplot stacked bar plot with percentage labels

我正在嘗試根據計數做一個堆疊條 plot,但標簽顯示 plot 上的百分比。 我制作了下面的 plot。 但是,百分比是基於所有數據。 我所追求的是球隊的百分比(例如澳大利亞的百分比之和 = 100% 和英格蘭的百分比 = 100%)。 團隊情節

實現這一點的代碼如下 function。 這個 function 計算了每支球隊在 5 場比賽中不同角色的數量(我不得不將結果除以 10,因為每場比賽的球員角色出現兩次(5 場比賽 x 2 次出場):

team_roles_Q51 <- function(){
        ashes_df <- tidy_data()
        
        graph <- ggplot(ashes_df %>%
                        count(team, role) %>%       #Groups by team and role
                        mutate(pct=n/sum(n)),       #Calculates % for each role
               aes(team, n, fill=role)) +
                geom_bar(stat="identity") +
                scale_y_continuous(labels=function(x)x/10) +      #Needs to be a better way than dividing by 10
                ylab("Number of Participants") +
                geom_text(aes(label=paste0(sprintf("%1.1f", pct*100),"%")),
                          position=position_stack(vjust=0.5)) +
                ggtitle("England & Australia Team Make Up") +
                theme_bw()

        print(graph)
}

導入的 dataframe 示例為:

導入的數據框

dataframe的前10行結構如下:

structure(list(batter = c("Ali", "Anderson", "Bairstow", "Ball", 
"Bancroft", "Bird", "Broad", "Cook", "Crane", "Cummins"), team = structure(c(2L, 
2L, 2L, 2L, 1L, 1L, 2L, 2L, 2L, 1L), .Label = c("Australia", 
"England"), class = "factor"), role = structure(c(1L, 3L, 4L, 
3L, 2L, 3L, 3L, 2L, 3L, 3L), .Label = c("allrounder", "batsman", 
"bowler", "wicketkeeper"), class = "factor"), innings = structure(c(1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = c("test_1_innings_1", 
"test_1_innings_2", "test_2_innings_1", "test_2_innings_2", "test_3_innings_1", 
"test_3_innings_2", "test_4_innings_1", "test_4_innings_2", "test_5_innings_1", 
"test_5_innings_2"), class = "factor"), batting_num = c(6, 11, 
7, 10, 1, NA, 9, 1, NA, 9), score = c(38, 5, 9, 14, 5, NA, 20, 
2, NA, 42), balls_faced = c(102, 9, 24, 11, 19, NA, 32, 10, NA, 
120)), row.names = c(NA, 10L), class = "data.frame")

任何幫助,將不勝感激。 謝謝

您需要group_by team計算比例並在aes中使用pct

library(dplyr)
library(ggplot2)

ashes_df %>%
  count(team, role) %>%       
  group_by(team) %>%
  mutate(pct= prop.table(n) * 100) %>%
  ggplot() + aes(team, pct, fill=role) +
  geom_bar(stat="identity") +
  ylab("Number of Participants") +
  geom_text(aes(label=paste0(sprintf("%1.1f", pct),"%")),
            position=position_stack(vjust=0.5)) +
  ggtitle("England & Australia Team Make Up") +
  theme_bw()

在此處輸入圖像描述

暫無
暫無

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

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