Hi Bert: On Tue, Jan 4, 2011 at 8:39 PM, Bert Gunter <gunter.ber...@gene.com> wrote:
> Dennis: > > Can't speak to ggplot2, but your comments regarding lattice are not > quite correct. Many if not all of lattice's basic plot functions are > generic, which means that one has essentially complete latitude to > define plotting methods for arbitrary data structures. For example, > there is an xyplot.ts method for time series -- class ts -- data. > > Of course, for most lattice methods, the data do naturally come in a > data frame, and a standard lattice argument is to give a frame from > which to pull the data. But this is not required. > > I'm aware of that, but thank you for clarifying matters. I didn't state explicitly whether lattice required data frame input or not (my lattice example indicated no and indeed it does not), but the message was evidently muddled further down the post. Your comments speak to some of the differences in the design and philosophy of lattice and ggplot2, and I have no disagreement with your remarks about lattice. The point I was trying to make was that by using data frames and the several packages/base functions that support their manipulation, one can simplify the coding of graphics within both ggplot2 and lattice. There are many things one can do with data frames that one cannot with vectors, as you well know - e.g., extensions with new data (rbind) or new variables (cbind/transform, etc.), or reshaping, among others. These features can be used to advantage in both ggplot2 and lattice. The OP's example is a simple one - had he used df <- data.frame(x = sqrt(1:10), y = log(1:10)) # oops, forgot 1:10... qplot(as.numeric(rownames(df)), x, data = df, geom = 'line', colour = I('darkgreen')) # ...but it's OK # or xyplot(x ~ as.numeric(rownames(x)), data = df, type = 'l', col.line = 'darkgreen') there would have been no problem. A little inconvenient for a new user, maybe, but hardly 'very restrictive'. As for other types of R data objects that are not data frames, offhand I can't think of too many that are incapable of being converted to data frames somehow for the purposes of graphics, although I wouldn't be remotely surprised if some existed. [For example, one can extract fitted values, residuals and perhaps a model matrix from a model object and place the results in a data frame.] ggplot2 has a fortify() method to allow one to transform data objects for use in the package. There is some discussion in Chapter 9 of Hadley's book, but I'm not in a position to add insight as I haven't used it personally. I do think this is a fair statement, though, and it's been said before: if one wants *complete* control and flexibility of inputs and outputs, use base graphics. Both lattice and ggplot2, by virtue of being structured graphics systems, impose certain constraints (e.g., default actions) on the user which are system-dependent. Prof. Vardeman's quote still applies :) Dennis -- Bert > > > > > Please explain to me how > > > > df <- data.frame(x, y, index = 1:10) > > qplot(index, x, geom = 'line', ...) > > > > is 'very restrictive'. Lattice and ggplot2 are *structured* graphics > systems > > - to get the gains that they provide, there are some costs. I don't > perceive > > organization of data into a data frame as being restrictive - in fact, if > > you learn how to construct data for input into ggplot2 to simplify the > code > > for labeling variables and legends, the data frame requirement is > actually a > > benefit rather than a restriction. Moreover, one can use the plyr and > > reshape(2) packages to reshape or condense data frames to provide even > more > > flexibility and freedom to produce ggplot2 and lattice graphics. In > > addition, the documentation for ggplot2 is quite explicit about requiring > > data frames for input, so it is behaving as documented. The complexity > (and > > interaction) of the graphics code probably has something to do with that. > > > > Since Josh left you a quote, I'll supply another, from Prof. Steve > Vardeman > > in a class I took with him a long time ago: > > "There is no free lunch in statistics: in order to get something, you've > got > > to give something up." > > > > In this case, if you want the nice infrastructure provided by ggplot2, > you > > have to create a data frame for input. > > > > Dennis > > > >> > >> Thanks in advance, and best regards! > >> > >> Eduardo Horta > >> > >> [[alternative HTML version deleted]] > >> > >> ______________________________________________ > >> 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. > >> > > > > [[alternative HTML version deleted]] > > > > ______________________________________________ > > 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. > > > > > > -- > Bert Gunter > Genentech Nonclinical Biostatistics > [[alternative HTML version deleted]] ______________________________________________ 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.