[R] Code improvement
sebastien.bihorel at cognigencorp.com
Thu Oct 22 14:07:10 CEST 2009
I would like to have the opinion of the list on the following matter. I
have this generic function that creates multiple lattice scatterplots
per page based upon different subsets of the same dataset. The use of
different line/point colors/symbols in each plot is based upon a
'group' variable', which is the same for all plots. My goal is to create
a main legend per page:
1- because the 'group' variable' is the same for all plots, one legend
per page is sufficient;
2- because the subset of data used for a particular scatterplot does not
have to contain all unique elements of the group variable in the whole
dataset, the graphical settings need to be adjusted for each plot based
upon a general list of settings created from the whole dataset prior to
the creation of the plots;
3- for the same reason, I cannot use the key argument of xyplot to
create a legend from the first scatterplot.
Another piece of info is that this generic function could be used to
create very different categories of graphs, which each require a
different legend design.
At the moment, I am creating the legend based upon the general graph
settings and the category of plot. Prior to the creation of the graphs,
I store grid objects (text, point, line, or rectangle) into a list, with
also some information about the number of lines that the legend will
use, and the category of the plot. After the plots are printed to the
device, I open a viewport at the bottom of my page and split it
according to the type of the graph and the number of lines it needs.
Finally, I just loop through the content of the list and draw the grid
Overall, this is all fine but a bit 'brute force'. Also the final
'open-a-viewport-and-draw-inside' step is a big messy code within a
generic graph function, because one specific piece of code is needed per
category of plot, and because of additional subtleties (conditional
argument, etc... )
Based upon the behavior of the xyplot function, I understand that it
would be possible to store the fully formatted legend directly at its
creation and then just 'print' the stored object within my legend
viewport. Could anybody advise me on the process to follow to accomplish
that or maybe a few functions to look at?
As always, any help would be greatly appreciated.
More information about the R-help