[R] plot multiple data sets on same axis
Scott Lamb
slamb at slamb.org
Mon Dec 31 02:26:28 CET 2007
Thank you - that was exactly what I needed. I just discovered read.csv
understands URLs, so here it is with my actual data and formatting:
df <- read.csv("http://www.slamb.org/tmp/one-active.csv")
split.df <- split(df, df$method)
plot(0, xlim=range(df$inactive), ylim=range(df$elapsed), type="n",
ylab="time (µs)", xlab="inactive file descriptors", log="y",
main="1 active descriptor, 1 write", bty="l")
grid()
for (i in seq_along(split.df)) {
lines(split.df[[i]]$inactive, split.df[[i]]$elapsed, col=i)
}
legend("topleft", legend=labels(split.df),
fill=seq_along(split.df), bty="n")
Next question. Rather than plot each point, I'd like to use boxplots to
show the interquartile range for each x.
I've tried replacing the for loop body with this:
this_method <- split.df[[i]]
boxplot(elapsed~inactive, data=this_method,
add=TRUE, border=i, boxfill=i, outline=FALSE)
but it has two problems:
* it doesn't plot at the correct x values. It looks like I need to
supply a list of the x values as the "at" parameter, and I don't know
how to get unique values from this_method$inactive. (I tried the clunky
labels(split(this_method, this_method$inactive)), but it returns them as
strings.)
* it redraws the graph's frame, and it ignores bty="l" when doing so.
Not sure how to correct either.
Cheers,
Scott
--
Scott Lamb <http://www.slamb.org/>
More information about the R-help
mailing list