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/> ______________________________________________ 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.