9

データは一連の日付と時刻です。

date time
2010-01-01 09:04:43
2010-01-01 10:53:59
2010-01-01 10:57:18
2010-01-01 10:59:30
2010-01-01 11:00:44
…

私の目標は、横軸 (x) に日付、縦軸 (y) に時刻をとった散布図を表すことでした。同じ日に複数回ある場合は、色の濃さを追加することもできると思います。

日付のヒストグラムを作成するのは非常に簡単でした。

mydata <- read.table("mydata.txt", header=TRUE, sep=" ")
mydatahist <- hist(as.Date(mydata$day), breaks = "weeks", freq=TRUE, plot=FALSE)
barplot(mydatahist$counts, border=NA, col="#ccaaaa")
  1. 軸が日付および/または時間である散布図を作成する方法をまだ理解していません。
  2. また、直線的な日付 YYYY-MM-DD ではなく、MM-DD などの月に基づいて (異なる年が累積するため)、または週単位でローテーションすることもできるようにしたいと考えています。

ヘルプ、RTFM URI の平手打ち、またはヒントは大歓迎です。

4

2 に答える 2

16

このggplot2パッケージは、日付と時刻を非常に簡単に処理します。

日付と時刻のデータを作成します。

dates <- as.POSIXct(as.Date("2011/01/01") + sample(0:365, 100, replace=TRUE))
times <- as.POSIXct(runif(100, 0, 24*60*60), origin="2011/01/01")

df <- data.frame(
  dates = dates,
  times = times
)

次に、ggplot2魔法を手に入れます。 ggplotは自動的に日付を処理しますが、適切にフォーマットされた時間軸を取得するには、次を使用しますscale_y_datetime()

library(ggplot2)
library(scales)
ggplot(df, aes(x=dates, y=times)) + 
  geom_point() + 
  scale_y_datetime(breaks=date_breaks("4 hour"), labels=date_format("%H:%M")) + 
  theme(axis.text.x=element_text(angle=90))

ここに画像の説明を入力


質問の最後の部分、週ごとのグループ化などについて:これを実現するには、データを必要なバケットに事前に要約する必要がある場合があります。これにpossible useplyrを使用して、結果のデータをに渡すことができますggplot

于 2011-08-23T12:45:03.787 に答える
0

as.POSIXct、strptime、strftime、および difftime について読むことから始めます。これらおよび関連する関数を使用すると、データの目的のサブセットを抽出できます。フォーマットは少し難しいので、ヘルプ ファイルの例を試してみてください。
そして、日付が POSIX クラスに変換されると、 as.numeric() はそれらをすべて数値に変換するため、並べ替えやプロットなどが簡単になります。

編集:軸の仕様を簡素化するためにggplotで遊ぶというアンドレの提案は良いものです。

于 2011-08-23T12:45:06.273 に答える