1

次の方法で模倣できるデータがあります。

set.seed(1234)

foo <- data.frame(month = rep(month.name, each = 24),
              hour = rep(seq(1:24), 12),
              value1 = rnorm(nrow(foo), 60, 1),
              value2 = rnorm(nrow(foo), 60, 1))

foo <- melt(foo, id = c('month', 'hour'))

1か月あたりの各変数の24時間サイクルを表示するggplotを使用して、年間のプロットを作成したいと思います。

これが私がこれまでに試したことです:

t.plot <- ggplot(foo,
             aes(interaction(month,hour), value, group = interaction(variable,hour)))

t.plot <- t.plot + geom_line(aes(colour = variable))
print(t.plot)

これを取得すると、データがずれてしまいます。このような小さなSDの場合、最初の24個の値は60に近いはずですが、それらはいたるところにあります。この不一致の原因がわかりません。

https://www.dropbox.com/s/rv6uxhe7wk7q35w/foo.png

私がプロットするとき:

plot(interaction(foo$month,foo$hour)[1:24], foo$value[1:24])

私は私が期待する形になりますが、xaxisは非常に奇妙で、私が期待していたものではありません。

何か助けはありますか?

4

1 に答える 1

4

解決策は、日付を日付に設定することです(因子の交互作用ではありません)

例えば

library(lubridate)
library(reshape2)
Date <- as.Date(dmy('01-01-2000') + seq_len(24*365)*hours(1))
foo <- data.frame(Date = Date, 
  value1 = arima.sim(list(order = c(1,1,0), ar = 0.7), n = 24*365-1), 
   value2 = arima.sim(list(order = c(1,1,0), ar = 0.7), n = 24*365-1))
foo_melt <- melt(foo, id = 'Date')

# then you can use `scale_x_date` and `r` and ggplot2 will know they are dates
# load scales library to access date_format and date_breaks
library(scales) 
ggplot(foo_melt, aes(x=Date, y=value, colour = variable)) + 
 geom_line() +
 scale_x_date(breaks = date_breaks('month'), 
              labels = date_format('%b'), expand =c(0,0))

ここに画像の説明を入力してください

1か月あたり平均1日編集

月ごとにfacet_wrapを使用してファセットを作成できます

# using your created foo data set
levels(foo$month) <- sort(month.abb)
foo$month <- factor(foo$month, levels = month.abb)
ggplot(foo, aes(x = hour, y=value, colour = variable)) + 
 facet_wrap(~month) + geom_line() + 
 scale_x_continuous(expand = c(0,0)))

ここに画像の説明を入力してください

于 2012-10-04T04:51:31.833 に答える