# load data from the database # drv <- JDBC("org.postgresql.Driver", "/sw/share/java/postgresql-java/postgresql.jar"); # conn <- dbConnect(drv, "jdbc:postgresql://localhost/acd", "acd", ""); # dbListTables(conn); # kite <- dbReadTable(conn, "r"); # load data from an r data file load('kite.r.data'); summary(kite); # split the data up by site and exclude days where the wind never exceeded 15 kailua <- kite[kite$site == 'Kailua' & kite$skunk == 'f',]; laniakea <- kite[kite$site == 'Laniakea' & kite$skunk == 'f',]; moluleia <- kite[kite$site == 'Mokuleia' & kite$skunk == 'f',]; mygraph <- function(df, title='avg speed', ...) { # calculate the mean and stddev for each hour of the day -- like group by in SQL df.mean <- aggregate(df[c(3)], list(Hour = df$hr), mean); df.sd <- aggregate(df[c(3)], list(Hour = df$hr), sd); # for stupid reasons, the data.frame is alphabetically, so reorder it so that it is sorted numerically df.mean$Hour <- reorder(df.mean$Hour, c(1,2,3,4,5,6,7,8,9,10,11,12,13,14)); # make nice lables for the x-axis levels(df.mean$Hour) <- c('6am', '7am', '8am', '9am', '10am', '11am', 'noon', '1pm', '2pm', '3pm', '4pm', '5pm', '6pm', '7pm'); # plot the data plot(df.mean, ylab='avg speed', xlab='time of day', main=title, ylim=c(0,23)); # add the stddev error bars arrows(as.numeric(df.mean$Hour), df.mean$speed, as.numeric(df.mean$Hour), df.mean$speed + df.sd$speed, .05, 90 , col="orange"); arrows(as.numeric(df.mean$Hour), df.mean$speed, as.numeric(df.mean$Hour), df.mean$speed - df.sd$speed, .05, 90 , col="orange"); }; mygraph(laniakea, 'Laniakea: avg speed'); quartz.save('lanikea.png'); mygraph(kailua, 'Kailua: avg speed'); quartz.save('kailua.png'); mygraph(moluleia, 'Moluleia: avg speed'); quartz.save('moluleia.png');