2017-09-27 11 views
-1

なぜグループごとに複数のバーが作成されるのですか?私はグループ化された棒グラフのために行っていました。ggplotグループ化しないバー

df<-data.frame(c(40,23,18,41,15,14,38,21,1),c(rep("Do you agree with \nthe 'Hands Up' protestors ?",3),rep("Have the Police alienated themselves\n from the Public?",3),rep("Are the public ignoring the\n dangers Police face everyday?",3)),c("49%","28%","22%","59%","21%","20%","63%","35%","2%"),c(1,1,1,2,2,2,3,3,3)) 
colnames(df)<-c("values","names","percentages","group") 



ggplot(df,aes(names,values,group=group))+ 
    geom_bar(stat = "identity",position = "dodge",fill=rep(c("green","red","orange"),3))+ 
    geom_text(aes(label=percentages))+ 
    ylab("number of votes")+ 
    xlab("")+ 
    ggtitle("Police Opinion polls") 

マイ結果:

enter image description here

私が欲しいもの:

enter image description here

答えて

4

は、私はあなたが実際には異なる値が何であるかを区別し、あなたのデータフレームの列が必要だと思います(私は推測をした)。 geom_textは、指定された幅を使用して手動で避けなければならないため

df$response = rep(c("Yes", "No", "Unsure"), 3) 

dodger = position_dodge(width = 0.9) 
ggplot(df,aes(names,values, fill = response))+ 
    geom_bar(stat = "identity",position = dodger)+ 
    geom_text(aes(label=percentages), position = dodger)+ 
    ylab("number of votes")+ 
    xlab("")+ 
    ggtitle("Police Opinion polls") 

dodger = position_dodge(width = 0.9)ラインが必要とされている:ggplotが正常値をかわすために、次いでaes()コール内充填美的にその列をマップ。

+0

私はあなたのコードをテストしましたが、私が探していたグループ化された棒グラフを取得できませんでした。例を挙げてコードを更新しました。私の要求が不明な場合はお詫び申し上げます。 – Rilcon42

+2

投稿したサンプルデータを使用して、コードを自分の答えに追加し、回避された棒グラフを取得しました。あなたが私のコードをサンプルデータで実行して得た結果を説明できるので、どこが間違っているのか分かりますか? – Marius

+0

私の悪い - 私たちがdf $レスポンスに2つの異なるカラムを使用していたことに気付かなかった。 'response'を使用している間、私は' group'変数からそれを基にしました – Rilcon42