web-dev-qa-db-ja.com

ggplotは、カウントをgeom_barのパーセンテージで置き換えます

データフレームdがあります:

> head(d,20)
   groupchange Symscore3
1            4         1
2            4         2
3            4         1
4            4         2
5            5         0
6            5         0
7            5         0
8            4         0
9            2         2
10           5         0
11           5         0
12           5         1
13           5         0
14           4         1
15           5         1
16           1         0
17           4         0
18           1         1
19           5         0
20           4         0

私がプロットしていること:

ggplot(d, aes(groupchange, y=..count../sum(..count..),  fill=Symscore3)) +
  geom_bar(position = "dodge") 

このように、各バーはデータ全体に対する割合を表します。

代わりに、各バーが相対的な割合を表すようにします。つまり、groupchange = kで取得したバーの合計は1である必要があります。

16
Donbeo

最初にデータを要約して変換します。

library(dplyr)
d2 <- d %>% 
  group_by(groupchange,Symscore3) %>% 
  summarise(count=n()) %>% 
  mutate(perc=count/sum(count))

次に、それをプロットできます:

ggplot(d2, aes(x = factor(groupchange), y = perc*100, fill = factor(Symscore3))) +
  geom_bar(stat="identity", width = 0.7) +
  labs(x = "Groupchange", y = "percent", fill = "Symscore") +
  theme_minimal(base_size = 14)

これは与える:

enter image description here


または、percentパッケージのscales関数を使用できます。

brks <- c(0, 0.25, 0.5, 0.75, 1)

ggplot(d2, aes(x = factor(groupchange), y = perc, fill = factor(Symscore3))) +
  geom_bar(stat="identity", width = 0.7) +
  scale_y_continuous(breaks = brks, labels = scales::percent(brks)) +
  labs(x = "Groupchange", y = NULL, fill = "Symscore") +
  theme_minimal(base_size = 14)

与えるもの:

enter image description here

29
Jaap

最小コードでの視覚化が目標の場合、_position = "fill"_geom_bar()の引数として使用します。

グループの割合内で必要な場合は、@ Jaapのdplyr回答の回答が最適です。

上記のデータセットを使用してコピー/貼り付けを行う再現可能な例を次に示します。

_library(tidyverse)

d <- data_frame(groupchange = c(4,4,4,4,5,5,5,4,2,5,5,5,5,4,5,1,4,1,5,4),
                Symscore3 = c(1,2,1,2,0,0,0,0,2,0,0,1,0,1,1,0,0,1,1,0))

ggplot(d, aes(x = factor(groupchange), fill = factor(Symscore3))) +
  geom_bar(position="fill")
_

enter image description here

12
Rich Pauloo