簡體   English   中英

將position_dodge和position_fill組合在ggplot2中

[英]Combining position_dodge and position_fill in ggplot2

我想做的是以某種方式同時使用geom_bar()position = "fill"position = "dodge"參數。 使用一些樣本數據

set.seed(1234)
df <- data.frame(
  Id = rep(1:10, each = 12),
  Month = rep(1:12, times = 10),
  Value = sample(1:2, 10 * 12, replace = TRUE)
)

我可以創建以下圖表

df.plot <- ggplot(df, aes(x = as.factor(Month), fill = as.factor(Value))) + 
  geom_bar(position = "fill") + 
  scale_x_discrete(breaks = 1:12) + 
  scale_y_continuous(labels = percent) +
  labs(x = "Month", y = "Value")

在此輸入圖像描述

我喜歡這個圖表的縮放和標記,但我希望能夠將它拆開。 但是當我做以下事情時

df.plot2 <- ggplot(df, aes(x = as.factor(Month), fill = as.factor(Value))) + 
  geom_bar(position = "dodge", aes(y = (..count..)/sum(..count..))) + 
  scale_x_discrete(breaks = 1:12) + 
  scale_y_continuous(labels = percent) +
  labs(x = "Month", y = "Value")

在此輸入圖像描述

條形圖位於我想要的位置和縮放中,但y軸標簽表示每個條形相對於總計數的百分比,而不是每個月內的計數。

總而言之,我希望第二個圖形的視覺效果與第一個圖形的標記。 是否有一種相對簡單的自動化方法?

擴展我的評論:

library(ggplot2)
library(dplyr) 
library(tidyr)
library(scales)

df1 <- df %>%
    group_by(Month) %>%
    summarise(Value1 = sum(Value == 1) / n(),
              Value2 = sum(Value == 2) / n()) %>%
    gather(key = Group,value = Val,Value1:Value2)

df.plot2 <- ggplot(df1, aes(x = as.factor(Month),
                            y = Val, 
                            fill = as.factor(Group))) + 
    geom_bar(position = "dodge",stat = "identity") + 
    scale_y_continuous(labels = percent_format()) +
    scale_x_discrete(breaks = 1:12) + 
    labs(x = "Month", y = "Value")

暫無
暫無

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

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