簡體   English   中英

在ggplot2中修改geom_bar的“百分比”格式

[英]Modifying the 'percent' format for geom_bar in ggplot2

我試圖讓geom_bar將計數除以一個歸一化因子,而不是除以sum(.. counts ..),例如

n=200
df = data.frame(let = letters[sample(1:26,n,replace=TRUE)],
    cat=letters[sample(1:2,n,replace=TRUE)],
    norm = as.integer(1+round(runif(n)*10))

d <- ggplot(df, aes(let,fill=cat)) +
    geom_bar(aes(y = ((..count..)/sum(..count..))),position='dodge')

在此輸入圖像描述

相反,我想除以一個歸一化因子:

d <- ggplot(df, aes(let,fill=cat)) +
    geom_bar(aes(y = ((..count..)/norm)),position='dodge')

但這會產生一個錯誤:

> d
Error in (count)/norm : non-numeric argument to binary operator

這只是一個玩具的例子。 我的實際代碼有一個不同的錯誤,我還沒有復制:

> ggplot(droplevels(dfR[keep,]), aes(x=loc_breakBinned,fill=amalgamated_group) ) + 
     geom_bar(aes(y = ((..count..)/subject_count_ASDvTD)),position='dodge')
Error in eval(expr, envir, enclos) : 
  object 'subject_count_ASDvTD' not found

ggplot2堅持認為subject_count_ASDvTD不是dfR的一部分,但快速瀏覽便清楚地表明它是:

> str(dfR[keep,c('amalgamated_group','loc_breakBinned','subject_count_ASDvTD')])
'data.frame':   3694 obs. of  3 variables:
 $ amalgamated_group   : Factor w/ 6 levels "ASD","CONTRAST",..: 1 1 1 1 1 1 1 1 1 1 ...
 $ loc_breakBinned     : Factor w/ 18 levels "pos:(10.7,12.8]_totExonD:(-0.00822,1.64]",..: 14 1 8 8 14 4 8 13 8 14 ...
 $ subject_count_ASDvTD: int  213 213 213 213 213 213 213 213 213 213 ...

這里發生了什么? 為什么gant不能看到subject_count_ASDvTD

注意:相同的錯誤來自

ggplot(droplevels(dfR[keep,]), aes(x=loc_breakBinned,fill=amalgamated_group,y = ((..count..)/subject_count_ASDvTD) ) ) + 
    geom_bar(position='dodge')

解決方案是在aes中定義變量。 感謝@aosmith幫助我解決這個問題。 上面代碼的更正版本可以在下面找到:

d <- ggplot(df, aes(let,fill=cat,norm=norm)) +
    geom_bar(aes(y = ((..count..)/norm)),position='dodge')

在此輸入圖像描述

以及更復雜的實際代碼:

ggplot(droplevels(dfR[keep,]), aes(subject_count=subject_count_ASDvTD,x=loc_breakBinned,fill=amalgamated_group,y = ((..count..)/subject_count) ) ) + 
    geom_bar(position='dodge')

暫無
暫無

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

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