1

私はggplot2に非常に慣れていないので、誰かが私の単純な問題を手伝ってくれるかどうか疑問に思いました。私のサンプルデータフレームは次のとおりです。カウント数に対して時間(時間と分)をプロットしたいと思います。

Date <- c("07/12/2012 05:00:00", "07/12/2012 06:00:00", "07/12/2012 07:00:00",
      "07/12/2012 08:00:00")
Date <- strptime(Date, "%d/%m/%Y %H:%M")
Counts <- c("0","3","10","6")
Counts <- as.numeric(Counts)
df1 <- data.frame(Date,Counts,stringsAsFactors = FALSE)

#Adds time to dataframe.
df1 <- within(df1,{
  posb <- as.POSIXlt(Date,format="%d/%m/%Y %H:%M")
hours <- posb$hour
mins <- posb$min
dates <- format(posb, "%x")
time <- format(posb, "%H:%M")
posb <- NULL  # cleanup
})
#Draw graph (time versus Counts)
library(ggplot2)
g = ggplot(df1, aes(x=time, y=Counts))
g + geom_line()

常にエラーメッセージ「geom_path:各グループは1つの観測値のみで構成されています。グループの美学を調整する必要がありますか?」

誰かが私のコードを修正してグラフを正しくプロットできるようにするのを手伝ってもらえますか?

編集 私はまだ時間変数のフォーマットを機能させ、グラフをプロットしようとしています。ただし、現時点では、まだ日付形式を認識していません。次のことができるようにしたいと思います。1。設定された期間のデータをプロットします(たとえば、07:47:50から07:49:10まで)。2.Rに1分ごとにx軸をプロットするように依頼します。...これらのどちらも私は現時点で仕事をすることができません。私の実際のデータのサブセットを以下に示します。どんなアドバイスでもありがたいです。

day3 <- structure(list(Date = c("11/12/2012", "11/12/2012", "11/12/2012", 
                            "11/12/2012", "11/12/2012", "11/12/2012", "11/12/2012", "11/12/2012", 
                            "11/12/2012", "11/12/2012", "11/12/2012", "11/12/2012", "11/12/2012", 
                            "11/12/2012", "11/12/2012", "11/12/2012", "11/12/2012", "11/12/2012", 
                            "11/12/2012", "11/12/2012"), Time = c("07:46:10", "07:46:20", 
                                                                  "07:46:30", "07:46:40", "07:46:50", "07:47:00", "07:47:10", "07:47:20", 
                                                                  "07:47:30", "07:47:40", "07:47:50", "07:48:00", "07:48:10", "07:48:20", 
                                                                  "07:48:30", "07:48:40", "07:48:50", "07:49:00", "07:49:10", "07:49:20"
                            ), Axis1 = c(59L, 651L, 59L, 0L, 22L, 50L, 0L, 0L, 114L, 899L, 
                                         129L, 33L, 21L, 9L, 224L, 135L, 266L, 16L, 59L, 126L), Steps = c(1L, 
                                                                                                          2L, 1L, 0L, 2L, 1L, 0L, 0L, 5L, 15L, 6L, 2L, 2L, 0L, 8L, 5L, 
                                                                                                          16L, 1L, 3L, 8L)), .Names = c("Date", "Time", "Axis1", "Steps"
                                                                                                          ), row.names = 52838:52857, class = "data.frame")
#Creates a new dataframe with a time column.
day3 <- within(day3,{
  posb <- as.POSIXlt(Time,format="%H:%M:%S")
  posb <- NULL  # cleanup
})

library(ggplot2)
g = ggplot(day3, aes(x=strptime(Time, "%H:%M:%S"), y=Axis1)) + geom_line(aes(group = 1)) +
  theme_bw() +
  xlab("Time") + 
  ylab("Activity (Counts per 10 seconds)") + 
  scale_x_datetime(limits=c(as.POSIXct("07:47:50"),as.POSIXct("07:49:10")))


g
4

1 に答える 1

1

問題は、time変数が文字ベクトルであるという事実によるものです。

R> class(df1$time)
[1] "character"

あなたはそれをクラスのオブジェクトに納得させる必要があります、POSIXlt例えばこのように:

ggplot(df1, aes(x=strptime(time, "%H:%M"), y=Counts)) + geom_line()

または、はるかに簡単に、Date変換せずに変数を直接使用できます。

ggplot(df1, aes(x=Date, y=Counts)) + geom_line()

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

さらに良いことggplot2に、軸に沿ったタイムスパンに応じて、x軸に自動的にラベルが付けられることがわかります。

編集: x軸の制限を定義する場合は、次のようにすることができます:

ggplot(df1, aes(x=Date, y=Counts)) + geom_line() + scale_x_datetime(limits=c(as.POSIXct("2012/12/07 04:00:00"),as.POSIXct("2012/12/07 10:00:00")))
于 2013-02-11T14:50:15.993 に答える