データフレーム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
である必要があります。
最初にデータを要約して変換します。
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)
これは与える:
または、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)
与えるもの:
最小コードでの視覚化が目標の場合、_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")
_