On Thu, Mar 17, 2011 at 4:54 PM, David Wolfskill <r...@catwhisker.org> wrote: > On Thu, Mar 17, 2011 at 10:23:33AM -0400, Gabor Grothendieck wrote: >> On Thu, Mar 17, 2011 at 9:38 AM, David Wolfskill <r...@catwhisker.org> wrote: >> ... >> > But the X-axis labels show up as "large integers" -- the POSIXct values >> > are apparently treated as numeric quantities for this purpose. >> ... >> Please cut this all down to as small a reproducible example as you can >> manage and place it all in ***one*** code section that also generates >> the data so that we can copy a single section of code from your post >> to R. Use dput to convert data to code for this purpose. > > Thank you for that. :-) > > The data below is a bit larger than absolutely necessary, but its > much smaller than what I would normally be using -- and I was able > to paste this into R directly (on a different machine, getting the > same results), so I believe it will suffice. > > As a benefit, after going through this, I did manage to find an > invocation that is able to generate an acceptable X-axis -- at > least, sometimes. (Changing the size of the X11 window appears to > mess things up -- at least.) But this seems rather more complicated > than I expected. > > Anyway, here's a cut/paste of the requested code section: > > df <- structure(list(time = c(1297278016L, 1297278017L, 1297278018L, > 1297278019L, 1297278020L, 1297278021L, 1297278022L, 1297278023L, > 1297278024L, 1297278025L, 1297278026L, 1297278027L, 1297278028L, > 1297278029L, 1297278030L, 1297278031L, 1297278032L, 1297278033L, > 1297278034L, 1297278035L, 1297278036L, 1297278037L, 1297278038L, > 1297278039L, 1297278040L, 1297278041L, 1297278042L, 1297278043L, > 1297278044L, 1297278045L, 1297278046L, 1297278047L, 1297278048L, > 1297278049L, 1297278050L, 1297278051L, 1297278054L, 1297278055L, > 1297278056L, 1297278057L, 1297278058L, 1297278059L, 1297278060L, > 1297278061L, 1297278062L, 1297278063L, 1297278064L, 1297278065L, > 1297278066L, 1297278067L, 1297278068L, 1297278069L, 1297278070L, > 1297278071L, 1297278072L, 1297278073L, 1297278074L, 1297278075L, > 1297278076L, 1297278077L, 1297278078L, 1297278079L, 1297278080L, > 1297278081L, 1297278082L, 1297278083L, 1297278084L, 1297278085L, > 1297278086L, 1297278087L, 1297278088L, 1297278089L, 1297278090L, > 1297278091L, 1297278092L, 1297278093L, 1297278094L, 1297278095L, > 1297278096L, 1297278097L, 1297278098L, 1297278099L, 1297278100L, > 1297278101L, 1297278102L), kern.cp_time_idle = c(3193265L, 3193540L, > 3193771L, 3194037L, 3194267L, 3194458L, 3194572L, 3194602L, 3194602L, > 3194602L, 3194602L, 3194602L, 3194603L, 3194607L, 3194617L, 3194672L, > 3194802L, 3194933L, 3195067L, 3195225L, 3195378L, 3195378L, 3195418L, > 3195418L, 3195418L, 3195419L, 3195419L, 3195421L, 3195422L, 3195422L, > 3195422L, 3195422L, 3195422L, 3195450L, 3195450L, 3195664L, 3196432L, > 3196440L, 3196871L, 3196872L, 3196874L, 3196944L, 3196944L, 3197037L, > 3197130L, 3197130L, 3197132L, 3197159L, 3197159L, 3197162L, 3197166L, > 3197236L, 3197367L, 3197367L, 3197497L, 3197639L, 3197782L, 3197922L, > 3197946L, 3197947L, 3197954L, 3197954L, 3197954L, 3198194L, 3198194L, > 3198204L, 3198205L, 3198256L, 3198265L, 3198269L, 3198269L, 3198269L, > 3198269L, 3198269L, 3198270L, 3198270L, 3198270L, 3198270L, 3198270L, > 3198270L, 3198270L, 3198323L, 3198323L, 3198367L, 3198631L), > kern.cp_time_intr = c(5142L, 5142L, 5142L, 5143L, 5145L, > 5145L, 5145L, 5145L, 5145L, 5145L, 5145L, 5145L, 5145L, 5145L, > 5145L, 5145L, 5145L, 5145L, 5145L, 5145L, 5145L, 5145L, 5145L, > 5145L, 5145L, 5145L, 5145L, 5145L, 5145L, 5145L, 5145L, 5145L, > 5146L, 5147L, 5147L, 5147L, 5148L, 5148L, 5149L, 5150L, 5152L, > 5152L, 5152L, 5153L, 5153L, 5155L, 5156L, 5156L, 5156L, 5156L, > 5156L, 5156L, 5156L, 5156L, 5156L, 5156L, 5156L, 5156L, 5156L, > 5156L, 5156L, 5156L, 5156L, 5156L, 5157L, 5157L, 5157L, 5157L, > 5157L, 5157L, 5157L, 5157L, 5157L, 5157L, 5157L, 5157L, 5157L, > 5157L, 5157L, 5157L, 5157L, 5157L, 5157L, 5157L, 5157L), > kern.cp_time_nice = c(36L, 36L, 36L, 36L, 36L, 36L, 36L, > 36L, 36L, 36L, 36L, 36L, 36L, 36L, 36L, 36L, 36L, 36L, 36L, > 36L, 36L, 36L, 36L, 36L, 36L, 36L, 36L, 36L, 36L, 36L, 36L, > 36L, 36L, 36L, 36L, 36L, 36L, 36L, 36L, 36L, 36L, 36L, 36L, > 36L, 36L, 36L, 36L, 36L, 36L, 36L, 36L, 36L, 36L, 36L, 36L, > 36L, 36L, 36L, 36L, 36L, 36L, 36L, 36L, 36L, 36L, 36L, 36L, > 36L, 36L, 36L, 36L, 36L, 36L, 36L, 36L, 36L, 36L, 36L, 36L, > 36L, 36L, 36L, 36L, 36L, 36L), kern.cp_time_sys = c(132583L, > 132591L, 132608L, 132618L, 132646L, 132667L, 132694L, 132737L, > 132784L, 132825L, 132833L, 132881L, 132933L, 132977L, 133017L, > 133059L, 133093L, 133121L, 133147L, 133172L, 133210L, 133220L, > 133259L, 133302L, 133342L, 133388L, 133431L, 133494L, 133547L, > 133557L, 133592L, 133631L, 133673L, 133713L, 133765L, 133785L, > 133798L, 133808L, 133816L, 133857L, 133892L, 133951L, 133960L, > 134004L, 134043L, 134109L, 134170L, 134206L, 134268L, 134329L, > 134396L, 134443L, 134486L, 134501L, 134558L, 134611L, 134654L, > 134704L, 134743L, 134789L, 134824L, 134871L, 134881L, 134898L, > 134929L, 134994L, 135038L, 135071L, 135126L, 135202L, 135277L, > 135292L, 135372L, 135440L, 135497L, 135565L, 135623L, 135639L, > 135680L, 135730L, 135777L, 135825L, 135834L, 135884L, 135899L > ), kern.cp_time_user = c(545975L, 545976L, 546011L, 546017L, > 546041L, 546113L, 546260L, 546479L, 546728L, 546987L, 547002L, > 547256L, 547498L, 547740L, 547980L, 548171L, 548293L, 548418L, > 548542L, 548645L, 548753L, 548762L, 548973L, 549232L, 549510L, > 549761L, 550018L, 550243L, 550541L, 550555L, 550815L, 551073L, > 551354L, 551583L, 551827L, 551883L, 551893L, 551893L, 551893L, > 552149L, 552407L, 552566L, 552575L, 552723L, 552901L, 553119L, > 553343L, 553568L, 553796L, 554020L, 554237L, 554419L, 554530L, > 554533L, 554630L, 554725L, 554823L, 554919L, 555148L, 555411L, > 555673L, 555938L, 555962L, 555997L, 556261L, 556480L, 556725L, > 556927L, 557157L, 557377L, 557616L, 557641L, 557919L, 558143L, > 558379L, 558625L, 558877L, 558921L, 559194L, 559476L, 559723L, > 559940L, 559961L, 560151L, 560156L)), .Names = c("time", > "kern.cp_time_idle", "kern.cp_time_intr", "kern.cp_time_nice", > "kern.cp_time_sys", "kern.cp_time_user"), class = "data.frame", row.names = > c(NA, > -85L)) > class(df$time) <- "POSIXct" > oid = "kern.cp_time_" > pat = paste("^", oid, sep = "") > col_vec = c("red", "yellow", "green", "blue") > cpu_states <- c("sys", "intr", "user", "nice", "idle") > require(zoo) > df_d <- diff(zoo(df[, grep(pat, names(df))], order.by = df$time)) > d_range <- range(index(df_d)) > sub <- paste("[", strftime(d_range[1], format = "%c"), "-", > strftime(d_range[2], format = "%c"), "]") > df_pct <- sweep(df_d, 1, apply(df_d, 1, sum), "/")[, paste(oid, > cpu_states[1:4], sep = "")] * 100 > title <- "make -j4 -DNOCLEAN buildworld" > barplot(df_pct, border = NA, col = col_vec, space = 0, main = title, > sub = sub, ylab = "CPU %", ylim = c(0, 100), xlab = "Time") > barplot(df_pct, border = NA, col = col_vec, space = 0, main = title, > sub = sub, ylab = "CPU %", ylim = c(0, 100), xlab = "Time", > names.arg = index(df_d)) > traceback() > barplot(df_pct, border = NA, col = col_vec, space = 0, main = title, > sub = sub, ylab = "CPU %", ylim = c(0, 100), xlab = "Time", > axisnames = FALSE) > axis.POSIXct(1, index(df_d)) > barplot(df_pct, border = NA, col = col_vec, space = 0, main = title, > sub = sub, ylab = "CPU %", ylim = c(0, 100), xlab = "Time", > axisnames = FALSE) > axis(1, at = pretty(index(df_d)) - as.numeric(d_range[1]), > labels = strftime(as.POSIXct(pretty(index(df_d)), > origin = "1970-01-01", tz = "UTC"), format = "%X")) > > > > Some comments: > * The first attempt (barplot invoked with default X-axis labels) > yields X-axis labels: > 1297278017 1297278035 1297278055 1297278073 1297278091 > > * The second (barplot() invoked with "names.arg = index(df_d)" yielded > the same default X-axis labels, along with: > Warning messages: > 1: In plot.window(xlim, ylim, log = log, ...) : > "names" is not a graphical parameter > 2: In axis(if (horiz) 2 else 1, at = at.l, labels = names.arg, lty = > axis.lty, : > "names" is not a graphical parameter > 3: In title(main = main, sub = sub, xlab = xlab, ylab = ylab, ...) : > "names" is not a graphical parameter > 4: In axis(if (horiz) 1 else 2, cex.axis = cex.axis, ...) : > "names" is not a graphical parameter >> traceback() > No traceback available > > * The third attempt (invoking barplot() with "axisnames = FALSE", > then invoking "axis.POSIXct(1, index(df_d))") yielded an X-axis label: > 59:56 > > * The fourth attempt (invoking barplot() with "axisnames = FALSE", > then invoking "axis()" after studying "axis.POSIXct" for a bit > (to try to use the parts of it that seemed to be useful for my > present purposes) yielded X-axis labels: > 11:00:20 11:00:40 11:01:00 11:01:20 11:01:4 > > As thos times reflect my timezone, there will likely be differences > (explainable by that observation) for others. > > > I hope to learn what I'm misunderstanding. > > I suspect that some of this may be "cultural," in a sense: I work > almost exclusively in UNIX (FreeBSD) environments, and am accustomed > to using (what R calls a) "POSIXct" as my preferred form for > date/timestamps for manipulatio0n; the apparent (frequent) requirement > that I specify the "origin" feels bizarre, as it's always 01 Jan 1970 > 00:00:00 UTC. Thus, when I think of a date/time stamp, I tend to think > in terms of time_t, and think of other representations as just that: > merely representations of what is "really" a time_t (or POSIXct). :-} > (Indeed: I wrote the script that generates the timestamp in the data in > question; it does that by invoking "date +%s".) >
This line in the code above produces an invalid object: class(df$time) <- "POSIXct" It should be: class(df$time) <- c("POSIXct", "POSIXt") Also there is a bug in barplot.zoo that results in a bunch of warnings (although it still produces the correct result). You can workaround it by using names= in place of names.arg= . Doing that will avoid those warnings. -- Statistics & Software Consulting GKX Group, GKX Associates Inc. tel: 1-877-GKX-GROUP email: ggrothendieck at gmail.com ______________________________________________ R-help@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.