[R] beginner question - effective way to chart sleep habits
Joshua Wiley
jwiley.psych at gmail.com
Sat Jul 2 04:45:00 CEST 2011
Hi Peter,
There are lots and lots of ways. Here are examples of a few that came
to mind. If you have never used the ggplot2 package, you will first
need to install it, which you can do by typing:
install.packages("ggplot2")
The code below should run "as is". You may see various trends over
time or based on bedtime because the data is (pseudo)randomly
generated, but you should see a "weekend" effect, which pops out in
the circular plot.
Hope this helps,
Josh
## Make up some data with potentially interesting weekend pattern
Date <- as.POSIXlt(as.POSIXct(1309639554, origin = "1970-01-01") +
cumsum(rep(86400, 90)) + rnorm(90, sd = 2700))
d <- c("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday",
"Saturday")
dat <- data.frame(Date,
Day = factor(weekdays(Date), levels = d),
Bedtime = Date$hour + Date$min/60,
Hours = rnorm(length(Date), mean = 6.4))
weekends <- grep("Saturday|Sunday", dat$Day)
dat[weekends, "Hours"] <- dat[weekends, "Hours"] +
rnorm(length(weekends), 1)
tmp <- with(dat, tapply(Hours, Day, mean))
dat2 <- data.frame(Days = factor(names(tmp), levels = d),
Hours = as.numeric(tmp))
## Load required packages
require(ggplot2)
## Create three separate plots
## you can look at them individually by calling: print(plotobject)
p.hours <- ggplot(dat, aes(x = Date, y = Hours)) +
geom_line() +
opts(title = "Hours Slept per Night")
p.ave <- ggplot(dat2, aes(x = Days, y = Hours)) +
geom_bar() +
coord_polar() +
opts(title = "Average Hours of Sleep per Day")
p.th <- ggplot(dat, aes(x = Bedtime, y = Hours)) +
geom_point() +
opts(title = "Bedtime and Hours Slept")
## Put all plots in one big one
pushViewport(vpList(
viewport(x = 0, y = 0.5, width = .5, height = .5,
just = c("left", "bottom"), name = "a"),
viewport(x = .5, y = .5, width = .5, height = .5,
just = c("left", "bottom"), name = "b"),
viewport(x = 0, y = 0, width = 1, height = .5,
just = c("left", "bottom"), name = "c")))
upViewport()
downViewport("a")
print(p.ave, newpage = FALSE)
upViewport()
downViewport("b")
print(p.th, newpage = FALSE)
upViewport()
downViewport("c")
print(p.hours, newpage = FALSE)
On Fri, Jul 1, 2011 at 3:20 PM, Peter <smeldrick at gmail.com> wrote:
> Hi - beginning R user question here - each day, over the course of several
> months, I've tracked the time I go to bed, the time I wake up, and my hours
> spent sleeping. What would be a good way to display this information? I
> think it would be ideal to show something resembling a bar and whisker graph
> for each day that would show the interval of hours spent asleep (or perhaps
> just a bar "floating" against a backdrop showing the hours of a given
> day/night), and that would also have a simple line graph of the total number
> of hours per day.
>
> Can I get a hint perhaps? Thanks very much.
>
> [[alternative HTML version deleted]]
>
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>
--
Joshua Wiley
Ph.D. Student, Health Psychology
University of California, Los Angeles
http://www.joshuawiley.com/
More information about the R-help
mailing list