2017-02-13 4 views
0

私は毎日の合計を計算した降雨データを連続的に収集しています。ここではいくつかのおもちゃのデータは次のとおりです。geom_stepを使用して毎日の降水量データをプロットする

Date <- c(seq(as.Date("2016-07-01"), by = "1 day", length.out = 10)) 
rain_mm <- c(3,6,8,12,0,0,34,23,5,1) 
rain_data <- data.frame(Date, rain_mm) 

次のように私はこのデータをプロットすることができます

次を与える
ggplot(rain_data, aes(Date, rain_mm)) + 
    geom_bar(stat = "identity") + 
    scale_x_date(date_labels = "%d") 

enter image description here

これは罰金です。ある日、どれくらいの降雨量があったかは明らかです。しかし、1日の正午と次の日の正午との間にある程度の雨が降ったと解釈することもできますが、それは間違いです。これは、グラフが同じ期間に関連する連続変数の他のプロットと結合されている場合に特に問題となります。

library(ggplot) 
ggplot(rain_data, aes(Date, rain_mm)) + 
    geom_step() + 
    scale_x_date(date_labels = "%d") 

与える:

enter image description here

これは、データを表示するための良い方法である、と今scale_x_dateがに表示されます

は、次のように私は geom_stepを使用することができ、この問題ラウンドを取得するには連続軸である。しかし、ステップの下の領域を埋めるのはうれしいことですが、これを行うための簡単な方法を見つけることはできません。

質問:geom_stepの下にどのように記入することができますか?出来ますか?

また、このSO question hereで説明したように、マルチプロットの図において、同一のx軸を容易にするためにPOSIXctDateを変換するのに有用であり得ます。次のように 私はこれを行うことができます。

library(dplyr) 
rain_data_POSIX <- rain_data %>% mutate(Date = as.POSIXct(Date)) 

        Date rain_mm 
1 2016-07-01 01:00:00  3 
2 2016-07-02 01:00:00  6 
3 2016-07-03 01:00:00  8 
4 2016-07-04 01:00:00  12 
5 2016-07-05 01:00:00  0 
6 2016-07-06 01:00:00  0 
7 2016-07-07 01:00:00  34 
8 2016-07-08 01:00:00  23 
9 2016-07-09 01:00:00  5 
10 2016-07-10 01:00:00  1 

をしかし、これは、それぞれの日付の1:00の時間を与えます。私はむしろ00:00を持っています。 as.POSIXct関数呼び出しでこれを変更することはできますか?それとも、別の関数を使用して後で行う必要がありますか?私はそれがtz = ""と関係があると思いますが、それを理解することはできません。

DateからPOSIXctに変換すると、生成される時間が00:00になる場合はどうすればよいですか?

おかげ

+0

最初の質問は、潜在的な重複のです:http://stackoverflow.com/questions/21887088/generate-a-filled-geom-step

私はとの良好な結果を見つけました –

+0

seconde質問: 'tz =" GMT "'または単に1時間: 'as.POSIXct(Date) - 3600'を削除してください。 – timat

+0

@ArtemSokolov私はそれを見ましたが、最近何か変わったかどうかを知りたいありがとう –

答えて

2

あなたの最初の質問のために、あなたはthis exampleをオフに作業することができます。

rain_tl <- mutate(rain_data, rain_mm = lag(rain_mm)) 

はその後、元のデータとこの時間遅れバージョンを組み合わせて、日付による再ソート:

rain_all <- bind_rows(old = rain_data, new = rain_tl, .id="source") %>% 
    arrange(Date, source) 

(新しく作成された注まず、あなたのデータの時間遅れバージョンを作成source列が正しく)タイムラグバージョンと元のデータをインタレース、ネクタイを破るために使用されます。

> head(rain_all) 
    source  Date rain_mm 
1 new 2016-07-01  NA 
2 old 2016-07-01  3 
3 new 2016-07-02  3 
4 old 2016-07-02  6 
5 new 2016-07-03  6 
6 old 2016-07-03  8  

あなたは今、あなたのステップを「埋める」ための共同行列を使用することができます:

ggplot(rain_data, aes(Date, rain_mm)) + 
    geom_step() + 
    geom_ribbon(data = rain_all, aes(ymin = 0, ymax = rain_mm), 
      fill="tomato", alpha=0.5): 

これは、次のプロットを作成:あなたの2番目の質問については

enter image description here


が、問題はそのas.POSIX.ct does not pass additional arguments to the converterので、tz引数は何もしません指定します。

1)あなたが望むものへの出力を再フォーマット:format(as.POSIXct(Date), "%F 00:00")、タイプcharacterのベクトルを返します

あなたは基本的に2つのオプションがあります。 as.POSIXct(as.character(Date))が、これはいてもよく、完全に時間をオフのままにします:あなたはPOSIXctとしてオブジェクト型を保持したい場合は、代わりに...

2)は、従来as.POSIX.ctに渡すにcharacterにごDateベクトルをキャストすることができますとにかくあなたが望むもの。

+0

それを通過していただきありがとうございます。上記の 'geom_bar'ソリューションを見ると、' scale_x_datetime'と組み合わせて使用​​すると 'width'引数を指定できないのですか? –

+0

あなたの質問はあなたの問題に特化しすぎています(例えば、元の質問では 'scale_x_date'が使用され、' scale_x_datetime'では何も言及されません)。あなたの問題を論理的な塊に分割して、各塊を一般の読者に興味のある特定の問題に対処する別個のStack Overflow質問として提示することを検討してください。 –

1

ハックを避けたい場合は、geom_barの式で位置をカスタマイズできます。

ggplot(rain_data, aes(Date, rain_mm)) + 
    geom_bar(stat = "identity", position = position_nudge(x = 0.51), width = 0.99) + 
    scale_x_date(date_labels = "%d") 

enter image description here

+0

ありがとう、私は 'Date'を' POSIXct'に変換し、時刻を12:00に設定することで、同じ行に沿って考えていました。これにより、複数のプロットを同じx-aixに揃えるときの方が簡単になります。しかし、 'geom_bar'は' scale_x_datetime'で 'width'引数を受け付けていないようです... –

+0

' width = 1'でも良く見えます –

+0

'width = 1'のように見えませんでした。わずかなパーティションはきれいで、晴れた夜明けを示しています。しかし、あなたは今必要なツールを持っています –

関連する問題