2016-03-31 6 views
1

geom_barを使って、sum(.. counts ..)で除算するのではなく、正規化係数で除算するようにしようとしています。ggplot2でgeom_barの 'パーセント'形式を変更する

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') 

enter image description here

代わりに、私は正規化係数で除算したいと思います:

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 ... 

は何である私の実際のコードは、私がまだ複製することができなかったさまざまなエラーが発生しましたここにいる?なぜggplotはsubject_count_ASDvTDと表示されますか?

注:溶液がAES内で変数を定義である

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

それは、あなただけの重量にしたいことは可能です= 1/norm'を 'aes'に入れますか? (グループごとに集計された)カウントを(ノルムのように)集計されていないものでどのように分けることができるか分かりません。 [この質問](http://stackoverflow.com/questions/17832608/how-to-use-earlier-declared-variables-within-aes-in-ggplot-with-special-operator)は、関連する可能性がありますが、それは定数によって。もう一つの選択肢は、ggplot2の外にグラフ化したい値を計算することです - それは簡単です。 – aosmith

+0

私は重量が私が探しているとは思わない。私は取得しようとしています:座っている座席の数/合併グループのgroup_i内の件数 – user3030872

+0

私は重量が私が探しているものではない。私は得ようとしている:amalgamated_groupsのgroup_i内で観察された座席数/件名。 パーセントは私に与えます:amalgamated_groupsのgroup_i内の遺伝子座の数/遺伝子座の数。 weight = subject_countとすると、amalgamated_groupsのgroup_i内の件数/ amalgamated_groupsのgroup_i内のlociの数?それは私が探しているものの逆です。それから、この作品は? geom_bar(position = 'dodge') ' – user3030872

答えて

0

から同じエラーarrises。私はそれを整理するための@aosmithに感謝します。

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

enter image description here

そして、もっと複雑な実際のコード:上記のコードの修正されたバージョンが下に見つけることができます `重みを使用して

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