[R] Using barplot() with zoo -- names.arg not permitted?
David Wolfskill
david at catwhisker.org
Thu Mar 17 14:38:26 CET 2011
I've used barplot(), including the anmes.arg parameter, on data frames
successfully, but I'm even newer to using zoo than I am to R. :-}
I am working on a functon that accepts a data frame ("df") as its
primary argument, extracts information from it to create a zoo, then
generates a plot based on that.
The data frame has a column called "time" which is a standard UNIX time
-- the number of seconds since 01 Jan 1970 (UTC), so I treat that as a
POSIXct. (The types of the other columns in the data frame varies
greatly, and the sequence in which they occur is not expected to be
constant. Thus, I find it easier to let R make a reasonable guess as to
the data type, and override special cases -- such as "time" -- on an
individual basis.)
The data frame contains certain columns whose values are counters, so I
generate a zoo of the diff():
oid = "kern.cp_time_"
pat = paste("^", oid, sep = "")
class(df$time) <- "POSIXct"
df_d <- diff(zoo(df[, grep(pat, names(df))], order.by = df$time))
I then save the start & end timestamps for future reference, and
generate another zoo, this one containing only the percentages from
df_d:
cpu_states <- c("sys", "intr", "user", "nice", "idle")
d_range <- range(index(df_d))
df_pct <- sweep(df_d, 1, apply(df_d, 1, sum), "/")[, paste(oid, cpu_states[1:4], sep = "")] * 100
Well, that is, I save the percentages in which I'm interested.
So far, so good. df_pct is a zoo (as expected, and the content looks
reasonable.
I then plot it, e.g.:
barplot(df_pct, border = NA, col = colvec, space = 0, main = title,
sub = sub, ylab = "CPU %", ylim = c(0, 100), xlab = "Time")
But the X-axis labels show up as "large integers" -- the POSIXct values
are apparently treated as numeric quantities for this purpose.
And if I try
barplot(df_pct, border = NA, col = colvec, space = 0, main = title,
sub = sub, ylab = "CPU %", ylim = c(0, 100), xlab = "Time",
names.arg = index(df_pct))
I am told:
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
which I find a bit perplexing.
If I plot via:
barplot(df_pct, border = NA, col = col_vec, space = 0, main = title,
sub = sub, ylab = "CPU %", ylim = c(0, 100), x lab = "Time",
axisnames = FALSE)
that works OK, but then I'm unable to generate a human-readable set
of X-axis labels: At best, I'm able to get a single label at the origin.
Here's an excerpt from the generated df_d:
Browse[2]> df_d[1:10]
kern.cp_time_idle kern.cp_time_intr kern.cp_time_nice
1297278017 275 0 0
1297278018 231 0 0
1297278019 266 1 0
1297278020 230 2 0
1297278021 191 0 0
1297278022 114 0 0
1297278023 30 0 0
1297278024 0 0 0
1297278025 0 0 0
1297278026 0 0 0
kern.cp_time_sys kern.cp_time_user
1297278017 8 1
1297278018 17 35
1297278019 10 6
1297278020 28 24
1297278021 21 72
1297278022 27 147
1297278023 43 219
1297278024 47 249
1297278025 41 259
1297278026 8 15
Here's a excerpt from the generated df_pct:
Browse[2]> df_pct[1:10]
kern.cp_time_sys kern.cp_time_intr kern.cp_time_user
1297278017 2.816901 0.0000000 0.3521127
1297278018 6.007067 0.0000000 12.3674912
1297278019 3.533569 0.3533569 2.1201413
1297278020 9.859155 0.7042254 8.4507042
1297278021 7.394366 0.0000000 25.3521127
1297278022 9.375000 0.0000000 51.0416667
1297278023 14.726027 0.0000000 75.0000000
1297278024 15.878378 0.0000000 84.1216216
1297278025 13.666667 0.0000000 86.3333333
1297278026 34.782609 0.0000000 65.2173913
kern.cp_time_nice
1297278017 0
1297278018 0
1297278019 0
1297278020 0
1297278021 0
1297278022 0
1297278023 0
1297278024 0
1297278025 0
1297278026 0
I'm using:
R version 2.12.2 (2011-02-25)
in a FreeBSD 8.2-STABLE #125 r219696: Wed Mar 16 04:19:54 PDT 2011
environment.
I'm willing to share the function (in its current state) and a sample
data set (~90KB), but didn't think it would be appropriate to spam the
list with either at this point.
Thanks!
Peace,
david
--
David H. Wolfskill david at catwhisker.org
Depriving a girl or boy of an opportunity for education is evil.
See http://www.catwhisker.org/~david/publickey.gpg for my public key.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 196 bytes
Desc: not available
URL: <https://stat.ethz.ch/pipermail/r-help/attachments/20110317/e9e697fd/attachment.bin>
More information about the R-help
mailing list