[英]R ggplot2 using ..count.. when using facet_grid
我在Ubuntu中使用R studio,標准更新的R和ggplot2
我嘗試在ggplot中創建直方圖,並按組分隔數據。
我需要繪圖的y軸來表示由小平面網格分割的子組中每個bin的頻率。
例如,如果我在數據中有兩個條目
a group
1 1
2 2
我需要使用facet_grid按組拆分,然后顯示a有一個1為1的條,它是組1中100%的例子,反之亦然。
我發現這樣做的方法是使用(..count ..)/ sum(.. count)但sum(.. count ..)將計算整個數據框中的頻率並給出我不想要的結果,
我無法找到深度使用..count的好文檔..
文檔中沒有什么非常全面的,
這是我正在使用的示例代碼
df <- data.frame(a = 1:10, b = 1:10, group = c(rep(1,5),rep(2,5)))
p<-ggplot(df) + geom_histogram(aes(x = a, y = (..count..)/sum(..count..))) +
facet_grid(group ~ .)
您可以看到y軸將包含0.1作為最高值,我希望它顯示1%值的100%在例如組1中。 等等
編輯:
感謝Jimbou的答案和參考適用於離散數據的精心構建的漫游,請注意我在這里遇到的真正問題是需要使用連續數據,以及分組多個值的箱子,此外,那里沒有關於如何使用..count ..函數執行此操作的正確文檔,因此我認為找到解決方案並且不使用四處走動很重要
這是一個dplyr解決方案。
df%>% group_by(group)%>%mutate(n = n(), prop = n/sum(n))
經過大量的游戲,以及你們給出的非常好的方向,我發現Jimbou和Shayaa的答案之間有一點點補充和融合,還有一些額外的代碼可以很好地運作。
t <- data %>% group_by(group,member,v_rate) %>% tally %>% mutate(f = n/sum(n))
將獲取數據並按組,成員,v_rate進行分組,並將每組的計數除以總和(組中的相對頻率)
比我們想用ggplot2創建直方圖並使用這些值作為直方圖的權重函數,否則這一切都是徒勞的,
p <- ggplot(t, aes(x = v_rate, weight = f)) + geom_histogram() + facet_grid(group ~ member)
這很棒。
你可以試試:
首先使用ave
計算每組的長度:
df$gr_l <- ave(df$a, df$group, FUN = function(x) length(x))
獲得各比例a
使用組內by
:
df$gr_prop <- c(by(df, df$group + df$a, FUN = function(x) length(x$a)/unique(x$gr_l) ))
繪制數據。
ggplot(df, aes(x=a, y=gr_prop)) +
geom_bar(stat="identity",position='dodge') +
facet_grid(group ~ .)
試試..density..
? 這將使當地大眾與當地人數相比,目前所寫的總體無所不包
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.