我想在ggplot2中創建一個堆積的條形圖來顯示對應於每個分類變量的值的百分比。以下是我嘗試使用的數據示例。帶有facet_grid的ggplot2中的多個分類變量的堆積條形圖
sampledf <- data.frame("Death" = rep(0:1, each = 5),
"HabitA" = rep(0:1, c(3, 7)),
"HabitB" = rep(1:2, c(4, 6)),
"HabitC" = rep(0:1, c(6, 4)))
每個習慣都是我用來創建堆積條形圖的列,我想使用facet_grid中的死亡列。我期望在條形圖中顯示每種習慣的值的百分比。
我認爲我需要創建圖表的輸出數據應該轉化爲,在Death = 0下,HabitA具有60%0值,並且40%的值是1,而在死亡= 1下,100% HabitA值爲1.
我已經使用ggplot和group_by生成了像這樣的圖表,只彙總了一個屬性,但我不確定它如何與數據中的多個分類屬性一起工作。
sampledf %>%
group_by(Death, HabitA) %>%
summarise(count=n()) %>%
mutate(perc=count/sum(count))
這會產生什麼,我想要的只是一個變量,但是當我到組中的其他屬性的參數,它返回計算一個百分比爲所有3個屬性的組合,這是不是我所期待的。我嘗試使用summarise_at/mutate_at,但它似乎並沒有工作。
sampledf %>%
group_by(Death) %>%
mutate_at(c("HabitA", "HabitB"), Counts = n())
有沒有一種簡單的方法可以在R中做到這一點,並將結果數據用作ggplot2的輸入?
編輯:
我試圖重塑數據並使用長的形式建立我的陰謀。這是我的。
long <- melt(sampledf, id.vars = c("Death"))
生成的數據是這種格式。
Death variable value
1 0 HabitA 0
2 0 HabitA 0
3 0 HabitA 0
4 0 HabitA 1
5 0 HabitA 1
6 1 HabitA 1
7 1 HabitA 1
我不知道如何使用value
屬性來構建的情節,因爲目前我正在試圖建立ggplot計數的總次數每個級別的variable
列發生。
ggplot(long, aes(x = variable, fill = variable)) +
geom_bar(stat = "count", position = "dodge") + facet_grid(~ Death)
您可以考慮總結和繪圖之前重塑你的數據集中到長格式。有關如何執行此操作的一些選項,請參閱[這裏](https://stackoverflow.com/a/25856135/2461552)。 – aosmith