2016-09-26 7 views
0

こんにちは、私のグラフに3月が2回表示され、データには表示されないという問題があります。ggplot2を使用すると、月が正しく表示されない

私のデータは次のようになります。私のデータフレームはtry1と呼ばれます。

Month     Year tcol 
    2016-01-01 00:00:00 06  1461.0 
    2016-02-01 00:00:00 06  259.5 
    2016-03-01 00:00:00 06  191.2 
    2016-04-01 01:00:00 06  151.5 
    2016-05-01 01:00:00 06  119.6 
    2016-06-01 01:00:00 06  1372.5 
    2016-07-01 01:00:00 06  954.0 
    2016-08-01 01:00:00 06  1784.0 
    2016-09-01 01:00:00 06  1369.0 
    2016-10-01 01:00:00 06  6077.0 
    2016-11-01 00:00:00 06  1638.0 
    2016-12-01 00:00:00 06  3308.0 

私のコードは次のようになります。

ggplot(try1, aes(Month,tcol)) + 
     geom_point(aes(colour = Year),size=2) + 
     geom_line(aes(colour = Year), size=0.73)+ 
     theme_bw()+ 
     guides(col = guide_legend(ncol = 2))+ 
     scale_x_datetime(
         breaks=date_breaks("1 months"), 
         labels=date_format("%B"))+ 
     xlab("")+ #x axis label 
     ylab("Total Coliforms") 

問題は、グラフをプロットすると3月が2回表示されることです。 10月は除外されているようだ。あなたの助けのための

The resulting graph

感謝。

+0

どのデータ型が月の列ですか?ファクターまたは日付? – Wietze314

+0

問題を再現できません。 'dput(try1)'を実行して結果をあなたの質問にコピーできますか?それは同じクラスのオブジェクトで作業しています。 – Benjamin

+0

@ 9Heads、あなたの月ラベルは1ヶ月オフです。彼らは12月から始まり11月に終わります)。あなたはそれをどのように達成したのか分かりません。 :) – Benjamin

答えて

1

タイムゾーンの問題だと思われます。たとえば、このデータで

structure(list(Month = structure(list(sec = c(0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0), min = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L), hour = c(0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 0L, 0L), mday = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L), mon = 0:11, year = c(116L, 116L, 116L, 116L, 116L, 116L, 
116L, 116L, 116L, 116L, 116L, 116L), wday = c(5L, 1L, 2L, 5L, 
0L, 3L, 5L, 1L, 4L, 6L, 2L, 4L), yday = c(0L, 31L, 60L, 91L, 
121L, 152L, 182L, 213L, 244L, 274L, 305L, 335L), isdst = c(0L, 
0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L), zone = c("GMT", 
"GMT", "GMT", "BST", "BST", "BST", "BST", "BST", "BST", "BST", 
"GMT", "GMT"), gmtoff = c(NA_integer_, NA_integer_, NA_integer_, 
NA_integer_, NA_integer_, NA_integer_, NA_integer_, NA_integer_, 
NA_integer_, NA_integer_, NA_integer_, NA_integer_)), .Names = c("sec", 
"min", "hour", "mday", "mon", "year", "wday", "yday", "isdst", 
"zone", "gmtoff"), class = c("POSIXlt", "POSIXt"), tzone = c("Europe/London", 
"GMT", "BST")), Year = c(6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 
6L, 6L, 6L), tcol = c(1461, 259.5, 191.2, 151.5, 119.6, 1372.5, 
954, 1784, 1369, 6077, 1638, 3308)), .Names = c("Month", "Year", 
"tcol"), row.names = c(NA, -12L), class = "data.frame") 

グラフを再現できます。タイムゾーンを変更してみてください

attr(try1$Month, "tzone") <- "UTC" 

とreplot


更新。タイムゾーンを「UTC」に変更するのはなぜかと思っていました。 date_format()は、デフォルトで "UTC"となるtz引数をとります。 を参照してください。つまり、Monthのタイムゾーンを「UTC」に変更する代わりに、の引数をdate_format()に変更して、元のタイムゾーンがMonthであれば、それをattr(try1$Month, "tzone")で調べることができます。

+0

これは確かにタイムゾーンの問題です。上記のデータを私のシステムタイムゾーンでプロットし、正しいグラフを得ました。 [プロットのリンク](http://i.stack.imgur.com/tHvKD.png) – 9Heads

関連する問題