[英]Error message plotting timeseries with ggplot2
I am very new to ggplot2 and wondered whether anyone could help me with my simple problem. 我是ggplot2的新手,想知道是否有人可以帮助我解决我的简单问题。 My sample dataframe is given as follows.
我的示例数据帧如下所示。 I want to plot the time (hours and minutes) against the number of Counts.
我想根据计数数绘制时间(小时和分钟)。
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()
I always get the error message 'geom_path: Each group consist of only one observation. 我总是收到错误消息'geom_path:每个组仅包含一个观察值。 Do you need to adjust the group aesthetic?'.
您是否需要调整组的审美?”。
Can anyone help me rectify my code to allow my graph to plot correctly? 谁能帮助我纠正代码以正确绘制图形?
Edit I am still trying to get the formatting of my time variable to work, and plot a graph. 编辑我仍在尝试使时间变量的格式正常工作,并绘制图形。 However at the moment, it's still not recognising the date format.
但是目前,它仍然无法识别日期格式。 I would like to be able to: 1. Plot a set period of data (say from 07:47:50 to 07:49:10).
我希望能够:1.绘制一组数据(例如从07:47:50到07:49:10)。 2. Ask R to plot the x axis every whole minute.
2.要求R每分钟绘制x轴。 ... neither of these I can get to work at the moment.
...目前我都无法上班。 A subset of my real data is shown below.
我的真实数据的一个子集如下所示。 Any advice would be gratefully received.
任何建议将不胜感激。
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
The problem is due to the fact that your time
variable is a character vector : 问题是由于您的
time
变量是一个字符向量:
R> class(df1$time)
[1] "character"
You must convet it to an object of class POSIXlt
, for example like this : 您必须将其设置为
POSIXlt
类的对象,例如:
ggplot(df1, aes(x=strptime(time, "%H:%M"), y=Counts)) + geom_line()
Or, much simpler, you can directly use your Date
variable, without transformation : 或者,更简单地说,您可以直接使用
Date
变量,而无需进行转换:
ggplot(df1, aes(x=Date, y=Counts)) + geom_line()
Better yet, you will see that ggplot2
automagically labels your x axis depending on your timespan along the axis. 更好的是,您会看到
ggplot2
根据沿x轴的时间跨度自动标记x轴。
EDIT : if you want to define the x-axis limits, you can do something like : 编辑:如果要定义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")))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.