2017-03-10 12 views
2

ggplotを使用して時系列をプロットしようとしていますが、日時を別のデータフレーム列に格納しています。 ggplotにプロットの日付と時刻の両方を考慮させるにはどうすればよいですか?ggplot2の時系列:異なる列からの日数と時間の使用

#Tagua <- read.table(file = "TIMESERIE_OTO32.txt", header = TRUE,dec = ",") 
Tagua <- structure(
    list(
    Date = structure(c(1L, 1L, 2L, 2L), .Label = c("Day1", "Day2"), class = "factor"), 
    Hour_min = structure(c(1L, 2L, 1L, 2L), .Label = c("8:35", "8:36"), class = "factor"), 
    Tair = c(24.73, 24.29, 23.62, 24.29), 
    Tflower = c(29.79, 29.99, 30.37, 29.99), 
    Tbud = c(31.41, 31.82, 32.59, 31.82) 
), 
    .Names = c("Date", "Hour_min", "Tair", "Tflower", "Tbud"), 
    class = "data.frame", 
    row.names = c(NA, -4L)) 

日、時間、および花のさまざまな部分からの3温度:私のデータは、この

Date Hour_min Tair Tflower Tbud 
Day1 8:35 24,73 29,79 31,41 
Day1 8:36 24,29 29,99 31,82 
... .. .. ... ... 
Day2 00:00 23,62 30,37 32,59 

のように見えます

一つは、これでデータセットの小さなサンプルをロードすることができます。 私は1400分を2日間持っています。

私はこのスクリプトを書いた:

library(ggplot2) 


ggplot(aes(x = (Hour_min), group=1), data = Tagua) + 
    geom_line(aes(y = Tair, colour = "var1")) + 
    geom_line(aes(y = Tbud, colour = "var2")) + 
    geom_line(aes(y = Tflower, colour = "var3")) 

問題は日考慮せずに、(もちろん)午後12時00から23へのRプロットです。

どうすればこの問題を解決できますか?

可能であれば、時間軸に対応するx軸の目盛り(たとえば、2:00,3:00など)を設定したいと考えています。

+0

あなたが一日と時間の列から日付時刻変数を作成する必要があります。 2つの列からdatetime変数を作成する方法を見ているよりも、「日付」列に「day1」の代わりに実際の日付を割り当ててください(packageb'lubridate'はそれにいくつかの機能を持つかもしれません) – lbusett

+0

そして、もしそうでなければ'period'(曜日= 0、時間= 8、分= 35)、実際の日(ちょうどその日を過ぎた日)を気にすると、 'lubridate'パッケージの' Date'sの代わりに ' '。 また、単純なデモデータセットを提供すると、例えば' dput(head(Tagua)) 'のようにあなたを助けるのがはるかに簡単になります。 – zeehio

答えて

0

これは最短の解決策ではないかもしれませんが、段階的に実行してどのように動作するかを確認することができます。

library(lubridate) 
library(dplyr) 
library(tidyr) 
library(ggplot2) 

Tagua <- read.table(file = "TIMESERIE_OTO32.txt", header = TRUE, dec = ",") 


Tagua_clean <- Tagua %>% 
    # Separate hours and minutes: 
    separate(Hour_min, into = c("Hour", "Minute"), sep = ":") %>% 
    # Convert Day1 -> 0 
    #   Day2 -> 1 
    mutate(Day = as.numeric(gsub("Day", "", Date)) - 1) %>% 
    # Create a Period: 
    mutate(time_period = period(days = Day, hours = Hour, minutes = Minute)) %>% 
    # Create a Date, using the beginning of the experiment (if you know it): 
    mutate(Date = as.POSIXct("2017-01-01") + time_period) %>% 
    # Option 2: Convert the time period to hours: 
    mutate(Hours = as.numeric(time_period)/3600) %>% 
    select(Date, Hours, Tair, Tflower, Tbud) 


# Option 1: With real dates: 
ggplot(aes(x = Date), data = Tagua_clean) + 
    geom_line(aes(y = Tair, colour = "var1")) + 
    geom_line(aes(y = Tbud, colour = "var2"))+ 
    geom_line(aes(y = Tflower, colour = "var3")) 


# Option 2: With hours: 
ggplot(aes(x = Hours), data = Tagua_clean) + 
    geom_line(aes(y = Tair, colour = "var1")) + 
    geom_line(aes(y = Tbud, colour = "var2"))+ 
    geom_line(aes(y = Tflower, colour = "var3")) 

更新:毎日0時に再起動します。ここではDatesを使用しますが、その表示方法をカスタマイズします。

scale_x_datetimeは、一日の時間を表示するように"%H"に設定することができたり、昼と時間の組み合わせのために"Day %d \n Hour: %H"に設定することができ、引数date_labelsを持っています。その他のフォーマットオプションについては、?strptimeを参照してください。使用可能な別の引数は、date_breaksで、ラベルを1時間ごとに入力する場合は"1 hour"と指定します。

ggplot(aes(x = Date), data = Tagua_clean) + 
    geom_line(aes(y = Tair, colour = "var1")) + 
    geom_line(aes(y = Tbud, colour = "var2"))+ 
    geom_line(aes(y = Tflower, colour = "var3")) + 
    scale_x_datetime(date_labels = "Day %d \n Hour: %H") 

With Day/Hour

+0

zeehioに感謝します。私は最初のものとして繰り返しをしたいと思っています12-18-00-6 ...今それは30以上まで増加します。ありがとう;-) –

+0

あなたがもっている最良の選択肢は、datetimesを使って作業することです。オプション3 I juを参照してください。 stは答えに加えられました。 – zeehio

関連する問題