簡體   English   中英

geom_bar在第二個y軸上的比例

[英]Plot ratio of geom_bar on second y-axis

我想在第二個軸上使用plot_line繪制geom_bar的比率。 這是我的數據框:

df <- data.frame(code=c('F6', 'F6','D4', 'D4', 'F5', 'F5', 'C4', 'C4', 'F7', 'F7'),
           group=c('0','1','0','1','0','1','0','1','0','1'),
           count=c(80, 700, 30, 680, 100, 360, 70, 230, 40, 200))

目前,我繪制下圖:

ggplot(df, aes(x=code, y=count, fill=group)) +
  geom_bar(stat ="identity", position="dodge")

在此處輸入圖片說明

我也希望小組之間的比例。 例如,對於C4,它將是70/230 * 100 = 30%。 它可能代表以下內容:

在此處輸入圖片說明

任何想法 ?

您可以使用tidyverse庫計算每個組的百分比,然后使用輔助軸將其添加到繪圖中,以實現此目的:

library(tidyverse)

df <- data.frame(code=c('F6', 'F6','D4', 'D4', 'F5', 'F5', 'C4', 'C4', 'F7', 'F7'),
                 group=c('0','1','0','1','0','1','0','1','0','1'),
                 count=c(80, 700, 30, 680, 100, 360, 70, 230, 40, 200))

現在,制作另一個數據框,按照您的指示計算百分比。 我用spread來做到這一點。 另外,我將百分比計算為所計算百分比的7倍,因為您要將百分比(從0到100)放在同一圖表上(從0到700計數)。 因此7 * 100將填滿整個圖形。 我還添加了一個名為“ order”的新字段,因為geom_line不喜歡使用一個因素(組)來連接一條線。

  percentage.df <- df %>% 
      spread(group, count) %>% 
      mutate(percentage = 7*(`0`/`1`)*100) %>% 
      mutate(order = c(1:nrow(.)))

現在,當您繪制此圖形時,可以指定輔助軸,但必須記住要告訴ggplot您應該將數字除以7才能使輔助軸標簽有意義。

ggplot(df, aes(x=code, y=count)) +
  geom_bar(stat ="identity", position="dodge", aes(fill=group)) +
  geom_point(data = percentage.df, aes(code, percentage)) +
  geom_line(data = percentage.df, aes(order, percentage)) +
  scale_y_continuous(sec.axis = sec_axis(~ . /7))

在此處輸入圖片說明

您可以嘗試將比率標准化為最大y值( count )。

library(tidyverse)
MAX= max(df$count)

df %>% 
  group_by(code) %>% 
  mutate(ratio = count[1]/count[2]) %>%
  mutate(ratio_norm = MAX*ratio) %>%   
 ggplot(aes(x=code)) +
  geom_col(aes(y=count, fill=group), position="dodge") + 
  geom_point(data = . %>% distinct(code, ratio_norm), aes(y=ratio_norm)) +
  geom_line(data = . %>% distinct(code,  ratio_norm), aes(y=ratio_norm, group = 1)) + 
  scale_y_continuous(sec.axis = sec_axis(~./MAX, labels = scales::percent))

在此處輸入圖片說明

暫無
暫無

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

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