2017-07-06 17 views
0

ggplotの棒グラフに周波数と累積頻度を並べて表示しようとしていますが、最終的にはバーが重なってしまいます。ggplotでbarchartの頻度と累積頻度を並べる方法(ドッジポジション)

再現性の例:

data(mtcars) 
setDT(mtcars) 

data <- mtcars[, .(Total = .N), by = carb][order(carb)][, .(carb, freq = Total/sum(Total))][ 
    , .(carb, freq, cumfreq = cumsum(freq))] 

ggplot(data, aes(x = carb)) + 
    geom_bar(fill = "red", alpha = 0.5, stat = "identity" , aes(y = freq), position = position_dodge()) + 
    geom_bar(fill = "blue", alpha = 0.5, stat = "identity" , aes(y = cumfreq), position = position_dodge()) 

enter image description here

あなたのアドバイスは理解されるであろう。

答えて

0

私は少しあなたが(reshape2パッケージで)このように、使用しているデータを変更します:それはあなたが良い質問です

+0

これは良いアイデアであり、ありがとうございます。しかし、より一般的には、私はベクトルに対応する棒を置くことができることに興味を持っています。 ggplotを使用して列を並べて表示します。例えば。この場合、列はfreqとcumfreqです。より直接的な方法があるのですか、それとも常にデータの形を変えるべきですか? – AlK

0

何をしたいかどう

library(reshape2) 

new_data = melt(data,id = "carb") 

ggplot(data = new_data)+aes(x = carb, y = value, fill = variable)+ 
    geom_bar(alpha = 0.5,stat = "identity", position = position_dodge())+ 
    scale_fill_manual(values = c("red","blue")) 

は、教えてください!異なるジオメトリタイプについてはレイヤーを追加するのが一般的ですが、グループ化/ドッジドバーをプロットするためにデータを再構成/再形成する必要がありました。それにもかかわらず、あなたは、あなたが望むものを得ることができると信じています(データ争いはありません):https://plot.ly/~luana.marinho/114#plot。最も洗練されたソリューションではなく、合意しましたが、速くて、そこにあるRコードを知ることができます。

関連する問題