2016-07-21 15 views
0

私は一定期間の人口を表すグラフを作ろうとしています。しかし、日付は時系列ではありません。インポートされたCSVでは、日付はすべて正しく正しい順序で表示されます。ただし、以下のコードを実行すると、表示されるグラフの日付は正しい順序ではありません。開始日は中間にあり、終了日は開始日の左側にあります。私はそれを修正する方法はありますか?日付の順序はggplot2で時系列ではありません

sumc <- aggregate(ex2$C, bu=list(ex2$Date, ex2$Temp), FUN=sum) 
colnames(sumc) <- c("Date", "Temperature", "Individuals") 
ggplot(data= sumc, aes(x=Date, y=Individuals, group=Temperature, colour=Temperature)) + geom_line() + theme(plot.title = element_text(face="bold") 
    ,plot.background = element_blank() 
    ,panel.background = element_blank() 
    ,panel.grid.major = element_blank() 
    ,panel.grid.minor = element_blank() 
    ,panel.border = element_blank() 
    ,axis.line = element_line(colour="black", size=1) 
    ,axis.text.x = element_text(colour="black", size=10) 
    ,axis.text.y = element_text(color="black", size=8) 
    ,axis.title.x = element_text(colour="black", size=10, face="bold", vjust=-.2) 
    ,axis.title.y = element_text(color="black", size=10, face="bold", vjust=1.2) 
    ,legend.text=element_text(size=8)) 

この画像は時間の経過とともにの人口です。前

sumc$Date <- factor(sumc$Date, ordered = T)

を使用し、

This image is the population over time. But as you can see the dates on the x-axis are incorrect and off.

+0

*詳細*お手数ですが... **は**ご注文ですか?すぐに私の心に浮かぶのは、おそらくシステムが、軸のデータ型を「日付」ではなく「文字列」であると認識しているということです。あなたが見ている注文は、そのような(誤解された)解釈と何らかの形で一致していますか? –

+0

注文は2013年7月5日の開始日から、2013年7月20日の終了日まで続きます。私はこのコードを別のグラフで正常に使用しました。私はそれが別のグラフで成功したので、そのエラーのために誤解かもしれないかどうかは分かりません。 –

+0

しかし私は、日付文字列が*文字列、*日付ではなく解釈されているという私の仮説と一貫している(*)*ことを観察しています。グラフ "は単なる偶然だった。 。 。バグ(*)*をあなたに明らかにするために、その特定の出力では何も見なかったことになります。 –

答えて

1

あなたの日付は、データフレームに正しい順序でインポートしている場合:しかし、あなたはx軸上の日付が間違っているとオフを見ることができるようにプロットすること。これは、表示された順序に基づいて順序付けられた要素としてそれらを作成し、ggplotはそのようにそれらを保持しなければならないことを理解します。

編集:日付は注文されていない場合は、あなたがそれらを注文し、ベクトルに保存することができます:

dates <- unique(sort(sumc$Date)) 
sumc$Date <- factor(sumc$Date, labels = dates, ordered = T) 
+0

すべての要素には順序があります。 'ordered factor'クラスを指定する唯一の理由は、モデルに入れられるときに使用されるコントラストのためです。日付については、 'Date'クラスは' factor'クラスよりもはるかに適切です。 – Gregor

+0

十分に公正。私は時々、入力が何らかの非標準の日付書式を使用していると乱雑になる可能性があるので、 'Date'クラスを使用するのはちょっと気にしません。 –

+0

あなたのソートはアルファベット順に(単に 'Date'クラスでない限り)行われます。これは、OPがすでに持っている問題です。 – Gregor

3

Dateクラスに変換します

sumc$Date = as.Date(sumc$Date, format = "%m/%d%/Y") 

その後、あなたの同じプロットコードちょうどうまくいくでしょう。

変換またはformat引数の詳細については、?as.Dateまたはstrptimeを参照してください。

+0

あなたは絶対に素晴らしいです!本当にありがとうございました!!!!!! –

関連する問題