4

平日のデータの 1 時間ごとの頻度に関する概要を取得しようとしています。したがって、さまざまな日付を 1 つの日に凝縮して、時間だけが異なるようにし、順序付けられた要素として曜日を表す列を追加しました。

以下は私のデータの抜粋です。

my.log <- structure(list(Prorated = structure(c(1339535400, 1339536540, 1339524540, 1339480320, 1339537920, 1339529580, 1339500780, 1339532820, 1339522020, 1339522680, 1339465560, 1339529940, 1339472880, 1339508520, 1339519620, 1339536000, 1339526580, 1339514940, 1339518060, 1339512420, 1339513080, 1339500120, 1339543620, 1339485660, 1339496280, 1339526520, 1339514820, 1339531800, 1339531860, 1339501320), class = c("POSIXct", "POSIXt"), tzone = "%Y-%m-%d %H:%M:%S"), Wday = structure(c(1, 1, 1, 2, 1, 2, 2, 2, 2, 2, 3, 2, 3, 3, 3, 3, 4, 1, 1, 3, 3, 4, 4, 5, 5, 5, 1, 2, 2, 2), .Label = c("Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"), class = c("ordered", "factor"))), .Names = c("Prorated", "Wday"), row.names = c(NA, 30), class = "data.frame")

range(my.log$Prorated)
# here (n = 30):
# [1] "2012-06-12 01:46:00" "2012-06-12 23:27:00"
# w/ full data set (n = approx. 75000):
# [1] "2012-06-12 00:00:00" "2012-06-12 23:59:00"

次のコードで密度プロットをプロットしようとすると...

library("ggplot2")
library("scales")
p <- ggplot(my.log) + theme_bw() +
  geom_density(aes(Prorated, colour=Wday)) +
  scale_color_brewer("weekday", palette="Dark2") +
  scale_x_datetime("", breaks=date_breaks("4 hours"),
    labels=date_format("%H:00")) +
  opts(title="Distribution (KDE)")
print(p)

...両方のデータセットの x 軸は 00:00 ではなく 02:00am に開始され、その結果、密度プロット全体が翌日に移動します。(ここに画像を投稿したかったのですが、SO を初めて使用するので許可されていません。ImageShackで見つけることができます)

したがって、私の質問:密度プロットを 00:00 に開始するように qqplot() に指示するオプションはありますか?

SO で関連する質問(またはそれぞれの回答) を確認しましたが、何も見つかりませんでした。私の頭に浮かぶ唯一のオプションは、またはのいずれxlim()scale_x_continuous(limits=...)です。しかし、私が理解している限りでは、どちらも正しいものではありません。

前者はデータ ポイントを削除します (または、入力 data.frame のすべてのデータが既に正しい範囲内にあるため、そうではありません) が、後者は視点をシフトするだけであり、その結果、これらを追加せずに 23:59 でグラフが切り取られます (現在は非表示になっています) 先頭にあるデータポイント...だから、私が使用するとき

scale_x_datetime("", breaks=date_breaks("4 hours"), labels=date_format("%H:00"),
  limits=c(as.POSIXct("2012-06-12 00:00:00"), as.POSIXct("2012-06-12 23:59:00"))

上記のコードでは、グラフが間違っているように見えます/すべてのデータが表示されていません。

4

1 に答える 1

4

タイムゾーンの問題です。この関連する質問を参照してください: ggplot 0.9.0 の scale_datetime() の適切なタイムゾーン引数構文は何ですか

labels引数をfunction(x) format(x, "%H:00", tz="UTC")(または他の適切なタイムゾーン)に変更することで回避できます。POSIXtデータ フレームの列に不正な形式の tzone 属性があったため、サンプル データを変更する必要がありました。

ggplot(my.log) + theme_bw() +
  geom_density(aes(Prorated, colour=Wday)) +
  scale_color_brewer("weekday", palette="Dark2") +
  scale_x_datetime("", breaks=date_breaks("4 hours"),
    labels=function(x) format(x,"%H:00",tz="UTC")) +
  opts(title="Distribution (KDE)")

ここに画像の説明を入力

于 2012-06-12T17:58:58.890 に答える