2017-11-04 8 views
0

各都市の毎月の観測数と観測値の合計をプロットします。私の日付変数はymです(私はすでに数ヶ月間にそれを変換していますので、いくつかの観測値はymとcityの値が同じかもしれません)、私はcityの列に2つの都市があり、分離したグループの時系列の棒グラフをプロットする

毎月2本のバーが並んでいます。 1つのプロットには観測数があり、別のプロットでは、月と都市ごとにnumber列の合計があります。

私はカウントプロットのための次のコードを使用しています

library(ggplot2) 
ggplot(data = df, 
    aes(x = ym, group = city, fill = city)) + 
geom_bar(position = "dodge") 

enter image description here

をしかし、次の警告だ:

position_dodgeが

非オーバーラップX間隔を必要とします

私のサンプルデータフレームは次のとおりです。

df <- data.frame(city = c("JLM", "JLM", "JLM", "JLM", "JLM", "TLV", "JLM", "JLM", "JLM", 
         "JLM", "JLM", "JLM", "JLM", "JLM", "JLM", "JLM", "TLV", "JLM", 
         "JLM", "JLM", "JLM", "JLM", "JLM", "JLM", "JLM", "TLV", "JLM", 
         "JLM", "JLM", "JLM", "JLM", "TLV", "JLM", "JLM", "JLM", "JLM", 
         "JLM", "TLV", "JLM", "JLM", "JLM", "JLM", "JLM", "JLM", "JLM", 
         "JLM", "TLV", "JLM", "JLM"), 
      ym = structure(c(16679, 16709, 16709, 16709, 16709, 16709, 16709, 
           16709, 16709, 16709, 16709, 16709, 16709, 16709, 16709, 16740, 
           16740, 16740, 16740, 16740, 16770, 16770, 16770, 16770, 16770, 
           16801, 16801, 16801, 16832, 17136, 16861, 16861, 16861, 16861, 
           16892, 16922, 16922, 16953, 17014, 17045, 17075, 17136, 17167, 
           17226, 17257, 17257, 17257, 17287, 17318), class = "Date"), 
      number = c(1, 4, 1, 1, 1, 5, 1, 2, 3, 1, 2, 1, 18, 1, 2, 1, 3, 4, 1, 1, 
         1, 2, 14, 4, 1, 10, 1, 1, 3, 2, 2, 12, 1, 1, 20, 2, 2, 20, 1, 
         2, 7, 3, 21, 2, 3, 3, 4, 2, 5)) 

答えて

1

この問題を解決するためにいくつかの問題があります。

元の形式では、グラフはnumber列をプロットしていませんでした。すべての行がym列のカウントを示していました。だから私が思うエラーメッセージはこれに由来しています。たとえば、2015-10-01で14回の観測を行いました。あなたのグラフを修正するに

、あなたはy軸の値を指定し、barplotにstat="identity"引数を指定する必要があります。

ggplot(data = df, aes(x = ym, y = number, fill = city)) + 
    geom_bar(stat="identity", position="dodge") 

enter image description here

いくつかの問題はしかし、まだあります

  • プロットする前にデータが集計されていない場合、position = "dodge"は完全には機能しません。 2015-10-01の場合、値は18であることがわかります。データフレームを見ると、これは合計(38)でなく最大値です。
  • バーの幅が異なることがわかります。日付に2つの観測値(JLMとTLVの両方)がある場合は、バーが縮小されます。観測値が1つしかない場合は、それを全幅に印刷します。我々はこれをプロットした場合

    library(tidyverse)  
    df_fill <- dcast(df, ym ~ city, fun.aggregate = sum) %>% melt(. , id = "ym") 
    

    そして:

は、一日あたりのカテゴリごとに1つだけの観測があるので、あなたは、元のデータフレーム内の0の値が含まれており、データを集計する必要があり、これらの問題を修正するには

ggplot(data = df_fill, aes(x = ym, y = value, fill = variable)) + 
    geom_bar(stat="identity", position="dodge") 
数の列の合計のための優れたソリューションです

enter image description here

+0

、ありがとう!私が述べたように、私は毎月の観測数をプロットしたいので(数字列を無視して) – Nashh

+0

OK 'funでデフォルト関数を使用しました。「集計」は長さで、日付ごとのカウントを取得します。ありがとう! – Nashh

関連する問題