2017-08-02 27 views
0

私はすべてのスクリプト(1年前にコード化された)を再現していて、もはや同じプロットを得ていないことを知っていました。私は同じデータセットと同じコードを使用しています。唯一の違いは私のRインストールとggplot2のバージョンです---私はそれがここで問題であると仮定しています。(ggplot2 update?)百分率ラベル付き積み重なった棒グラフ

私はあなたにいくつかの愚かなプロットで問題を示してみましょう。私はまったく同じと正確に同じコードをしようとした場合、

今日のよう

Stacked barplot#1

:結果のようなものだろう

ess2 <- ddply(ess, .(essround2), function(.){ 
res <- cumsum(prop.table(table(factor(.$contplt2)))) 
    res2 <- prop.table(table(factor(.$contplt2))) 
    data.frame(lab=names(res), y=c(res), res2=res2, pos=cumsum(res2)-0.5*res2) 
}) 

ggplot(ess[ess$contplt2!="NA",], aes(x=essround2))+ 
    geom_bar(aes(fill=contplt2), position="fill")+ 
    geom_text(data=ess2[ess2$lab!="NA",], 
      aes(label=round(res2.Freq, 2), x=essround2, y=pos.Freq))+ 
    labs(x="ESS Round", y="Percent")+ 
    scale_x_discrete(breaks=c("R1", "R2", "R3", "R4", "R5", "R6"), 
        labels=c("2002", "2004", "2006", "2008", "2010", "2012"))+ 
    ggtitle("Contacted politicians")+ 
    scale_fill_manual(name="Contacted politician", values=c("#31a354", "#a1d99b")) 

:パーセントラベルを使用してスタックbarplotsを製造する場合、私のような何かをするだろうあなたはリットルを見ることができるように

Stacked barplot#2

:データセット、私は次のプロットを取得しますアベルはバー上に正しく配置されておらず、色が反転してプロットの読みがぎこちないようになります(積み重ねられた棒グラフがすでに十分に不自然でないかのように)。

ggplot2が開発された(またはおそらくplyrが問題なのですか?)私のコードで何か "古い"が見つかることがあるならば、私の問題は私のコードを更新していないと思います。第二の、幸運なプロットを作り、私はそこから調査することに非常に感謝して喜んでいます。

ありがとうございました!

編集:コメントの提案のおかげで、私は異なる国(同じコードと同じデータセット)を使用したため、プロットのパーセンテージは異なります。私はRとggplot2の異なるバージョンと正確に、正確に同じプロットを作成し、あなたは問題が解決しないことがわかります。Stacked barplot#3

+0

そのデータ....はい/いいえ列は '次にある'レベル= Cの( "はい"、「いいえ)と 'factor'としてフォーマットする必要はありません動作するはず – cephalopod

+0

あなたの応答をありがとうございます。2つ目のプロットは、変数 "contplt2"を2つのレベルの要素に変換して作成しました。私は完全にあなたの提案を理解していないかもしれません。すでに2つのレベルと3つ目のレベルに "NA"というラベルが付けられています(コードでは省略します) – YSC

+0

ファクタのレベルが正しい順序であることを確認してください – Gregor

答えて

0

前とess2を生成した後、二回contplt2のラベルを切り替えてみてください。
あなたのお役に立てば幸いです。

# Here I try to reproduce your dataset 
ess <- data.frame(
essround2 = c(
c(rep(2002,76),rep(2002,100-76)), 
c(rep(2004,78),rep(2004,100-78)), 
c(rep(2006,81),rep(2006,100-81)), 
c(rep(2008,79),rep(2008,100-79)), 
c(rep(2010,79),rep(2010,100-79)), 
c(rep(2012,82),rep(2012,100-82)) 
), 
contplt2 = c(
c(rep("No",76),rep("Yes",100-76)), 
c(rep("No",78),rep("Yes",100-78)), 
c(rep("No",81),rep("Yes",100-81)), 
c(rep("No",79),rep("Yes",100-79)), 
c(rep("No",79),rep("Yes",100-79)), 
c(rep("No",82),rep("Yes",100-82)) 
) 
) 

# First switch of contplt2 levels 
ess$contplt2 <- factor(ess$contplt2, levels=levels(ess$contplt2)[c(2,1)]) 

library(plyr) 
library(ggplot2) 
ess2 <- ddply(ess, .(essround2), function(.){ 
res <- cumsum(prop.table(table(factor(.$contplt2)))) 
    res2 <- prop.table(table(factor(.$contplt2))) 
    data.frame(lab=names(res), y=c(res), res2=res2, pos=cumsum(res2)-0.5*res2) 
}) 

# Second switch of contplt2 levels 
ess$contplt2 <- factor(ess$contplt2, levels=levels(ess$contplt2)[c(2,1)]) 


ggplot(ess[ess$contplt2!="NA",], aes(x=essround2))+ 
    geom_bar(aes(fill=contplt2), position="fill")+ 
    geom_text(data=ess2[ess2$lab!="NA",], 
      aes(label=round(res2.Freq, 2), x=essround2, y=pos.Freq))+ 
    labs(x="ESS Round", y="Percent")+ 
    scale_x_discrete(breaks=c("R1", "R2", "R3", "R4", "R5", "R6"), 
        labels=c("2002", "2004", "2006", "2008", "2010", "2012"))+ 
    ggtitle("Contacted politicians")+ 
    scale_fill_manual(name="Contacted politician", values=c("#a1d99b", "#31a354")) 

enter image description here

+0

お返事ありがとうございました。あなたのソリューションは完全に機能しましたが、私はまだ質問があります: "なぜ?"変更されたことは、私の変数のレベルを因数分解し、再因子化することを余儀なくされていますか?それは_gpplot2_なのでしょうか?それとも、割合を計算するときには_plyr_の仕組みですか?それとも別のものが欠けているのでしょうか?再度、感謝します。 – YSC

+0

#YSC良い質問YSC。答えを見つけたいのであれば、古いRシステムと新しいRシステムで 'plyr'と' ggplot2'の結果を比較する必要があります。 –

関連する問題