Skip to content

How to correct this

3 messages · Mulholland, Tom, Paul Murrell, Tom Mulholland

#
This raises the question of "best practice." My answer was predicated on the fact that Jin Li had been attempting to use grid.circle in the first place without success. I rashly made the assumption that there was already a move to try and use some of the more sophisticated techniques within R.

This is a good example of the comments in the "hidden costs" thread, where the pathways to learning R came under some scrutiny. It is also similar to the "[R] How to insert one element into a vector?" where it is noted that append can be used to insert the element. That is the function appears to be originally written for one purpose, but it is evident that it has a broader application that is not immediately recognizable from the function name. When you are new to R it can seem confusing that you use rect for rectangles but symbols for circles, or segments for lines and lines for not lines, but they really are lines.

I am not yet proficient enough to always know which is the best approach. That's even with defining best as quickest, most easily maintained or most readable etc etc.

Now to the point. I have formed a collection of graphics that I have prepared over the last two years which I use to remind myself of the little idiosyncrasies of the various techniques. These of course have evolved as I have. They mostly use data that I cannot make available. I thought it might be a good idea to produce reproducible code that shows the bewildering variety ways to skin the proverbial animal. That is to produce code that can create a PDF flipbook of plots. One of the first things that I do when I load a package, is to run the examples that produce graphical output. I tend to work backwards and understand processes better when I know what the final output looks like. I am mathematically challenged, but can often appreciate what is happening once I see the plot. Ideally the code would include all the bells and whistles. I say this because I have spent hours trying to figure out just exactly what something is supposed to do before finally figuring out that it was really much simpler than I had thought. The bells and whistles should also show how you sometimes have to use par outside of the function (or remember that the ... is there for a reason) to get the effect that you want. For example when I load the vcd package to do mosaicplots I think I have to use par(xpd = TRUE) to get my multi-line labels not to be clipped.

As an evolving beast I see this as a way of demonstrating the techniques that are generally regarded as being "best practice" in a comprehensive manner.

In short I am volunteering. What for? I am not quite sure, but it includes example plots using data that helps in clarifying how the plot should be used. The last point means that I am not capable of producing some plots (and the examples in some packages already do this well) as I have no idea what they mean even when I have plotted the example. 

Tom Mulholland




-----Original Message-----
From: Paul Murrell [mailto:p.murrell at auckland.ac.nz]
Sent: Tuesday, 23 November 2004 3:05 AM
To: Mulholland, Tom
Cc: Jin.Li at csiro.au; r-help at stat.math.ethz.ch
Subject: Re: [R] How to correct this


Hi
Mulholland, Tom wrote:
In this case, using grid (or gridBase) is probably overkill.  The 
symbols() function should do what you want.  For example, ...

symbols(rep(0.5, 4), rep(0.5, 4), circles=1:4, add=TRUE)

Paul

  
    
#
Hi
Mulholland, Tom wrote:
> This raises the question of "best practice." My answer was predicated
 > on the fact that Jin Li had been attempting to use grid.circle in the
 > first place without success. I rashly made the assumption that there
 > was already a move to try and use some of the more sophisticated
 > techniques within R.
 >
 > This is a good example of the comments in the "hidden costs" thread,
 > where the pathways to learning R came under some scrutiny. It is also
 > similar to the "[R] How to insert one element into a vector?" where
 > it is noted that append can be used to insert the element. That is
 > the function appears to be originally written for one purpose, but it
 > is evident that it has a broader application that is not immediately
 > recognizable from the function name. When you are new to R it can
 > seem confusing that you use rect for rectangles but symbols for
 > circles, or segments for lines and lines for not lines, but they
 > really are lines.
 >
 > I am not yet proficient enough to always know which is the best
 > approach. That's even with defining best as quickest, most easily
 > maintained or most readable etc etc.
 >
 > Now to the point. I have formed a collection of graphics that I have
 > prepared over the last two years which I use to remind myself of the
 > little idiosyncrasies of the various techniques. These of course have
 > evolved as I have. They mostly use data that I cannot make available.
 > I thought it might be a good idea to produce reproducible code that
 > shows the bewildering variety ways to skin the proverbial animal.
 > That is to produce code that can create a PDF flipbook of plots. One
 > of the first things that I do when I load a package, is to run the
 > examples that produce graphical output. I tend to work backwards and
 > understand processes better when I know what the final output looks
 > like. I am mathematically challenged, but can often appreciate what
 > is happening once I see the plot. Ideally the code would include all
 > the bells and whistles. I say this because I have spent hours trying
 > to figure out just exactly what something is supposed to do before
 > finally figuring out that it was really much simpler than I had
 > thought. The bells and whistles should also show how you sometimes
 > have to use par outside of the function (or remember that the ... is
 > there for a reason) to get the effect that you want. For example when
 > I load the vcd package to do mosaicplots I think I have to use
 > par(xpd = TRUE) to get my multi-line labels not to be clipped.
 >
 > As an evolving beast I see this as a way of demonstrating the
 > techniques that are generally regarded as being "best practice" in a
 > comprehensive manner.
 >
 > In short I am volunteering. What for? I am not quite sure, but it
 > includes example plots using data that helps in clarifying how the
 > plot should be used. The last point means that I am not capable of
 > producing some plots (and the examples in some packages already do
 > this well) as I have no idea what they mean even when I have plotted
 > the example.


What this sounds like to me is an "R graphics cookbook", which I think 
would be a good idea, though have you looked at, for example, the 
"Graphiques avec R" section of Vincent Zoonekynd's "Statistiques avec R"
(http://zoonek2.free.fr/UNIX/48_R/all.html)
or the "Graphing" section of Paul Johnson's "R tips" page 
(http://www.ku.edu/~pauljohn/R/Rtips.html)?

Paul


 > -----Original Message----- From: Paul Murrell
 > [mailto:p.murrell at auckland.ac.nz] Sent: Tuesday, 23 November 2004
 > 3:05 AM To: Mulholland, Tom Cc: Jin.Li at csiro.au;
 > r-help at stat.math.ethz.ch Subject: Re: [R] How to correct this
 >
 >
 > Hi
 >
 >
> Mulholland, Tom wrote:
>
 >> Taking note of the first post, this is what I assume you wish. Note
 >> Paul's caveat in the help file
 >>
 >> "If you resize the device, all bets are off!"
 >>
 >> require(gridBase) x<-seq(0,1,0.2) y<-x pred<-matrix(c(0.5, 0.5,
 >> 0.5, 0.5, 0.5, 0.5, 0.5, 0.7, 0.7, 0.7, 0.7, 0.5, 0.5, 0.7, 0.9,
 >> 0.9, 0.7, 0.5, 0.5, 0.7, 0.9, 0.9, 0.7, 0.5, 0.5, 0.7, 0.7, 0.7,
 >> 0.7, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5), 6, 6) image(x, y, pred,
 >> col = gray(20:100/100), asp='s', axes=F, xlab=" ", ylab="")
 >> points(0.5, 0.5, col = 5) # the centre of the image
 >
 >
 >
 > In this case, using grid (or gridBase) is probably overkill.  The
 > symbols() function should do what you want.  For example, ...
 >
 > symbols(rep(0.5, 4), rep(0.5, 4), circles=1:4, add=TRUE)
 >
 > Paul
 >
 >
 >
 >> vps <- baseViewports() pushViewport(vps$plot) grid.circle(x=0.5,
 >> y=0.5, r=0.1, draw=TRUE,  gp=gpar(col=5)) grid.circle(x=0.5, y=0.5,
 >> r=0.3, draw=TRUE, gp=gpar(col=5)) grid.circle(x=0.5, y=0.5, r=0.5,
 >> draw=TRUE, gp=gpar(col=5))
 >>
 >>
 >>
 >> -----Original Message----- From: Jin.Li at csiro.au
 >> [mailto:Jin.Li at csiro.au] Sent: Monday, 22 November 2004 1:21 PM To:
 >> r-help at stat.math.ethz.ch Subject: RE: [R] How to correct this
 >>
 >>
 >> Hi there,
 >>
 >> I would like to add a few circles to the following image:
 >> x<-seq(0,1,0.2) y<-x pred<-matrix(c(0.5, 0.5, 0.5, 0.5, 0.5, 0.5,
 >> 0.5, 0.7, 0.7, 0.7, 0.7, 0.5, 0.5, 0.7, 0.9, 0.9, 0.7, 0.5, 0.5,
 >> 0.7, 0.9, 0.9, 0.7, 0.5, 0.5, 0.7, 0.7, 0.7, 0.7, 0.5, 0.5, 0.5,
 >> 0.5, 0.5, 0.5, 0.5), 6, 6) image(x, y, pred, col =
 >> gray(20:100/100), asp='s', axes=F, xlab=" ", ylab="") points(0.5,
 >> 0.5, col = 5) # the centre of the image
 >>
 >> The centre of these circles needs to be overlapped with the centre
 >> of the image. Any helps are greatly appreciated. Regards, Jin
 >>
 >>
 >> -----Original Message----- From: Mulholland, Tom
 >> [mailto:Tom.Mulholland at dpi.wa.gov.au] Sent: Monday, 22 November
 >> 2004 12:29 P To: Li, Jin (CSE, Atherton) Subject: RE: [R] How to
 >> correct this
 >>
 >> I think you need to create a complete set of code that can be
 >> replicated by anyone trying to help. I ran the three grid.circle
 >> commands on my current plot and it did what I expected it to do. It
 >> plotted three circles centred in the current viewport. See the
 >> jpeg.
 >>
 >> The last command using points makes me think that you need to
 >> understand about units and the setting up of viewports. I have not
 >> played around with this much but I think thr newsletter had an
 >> article which may be of use (although it uses old code I think the
 >> differences are minor)
 >>
 >> Ciao, Tom
 >>
 >> -----Original Message----- From: Jin.Li at csiro.au
 >> [mailto:Jin.Li at csiro.au] Sent: Monday, 22 November 2004 10:07 AM
 >> To: r-help at stat.math.ethz.ch Subject: [R] How to correct this
 >>
 >>
 >> Hi there,
 >>
 >>
 >>
 >> I tried to add a few circles on an existing figure using the
 >> following codes
 >>
 >>
 >>
 >> grid.circle(x=0.5, y=0.5, r=0.1, draw=TRUE,  gp=gpar(col=5))
 >>
 >> grid.circle(x=0.5, y=0.5, r=0.3, draw=TRUE, gp=gpar(col=5))
 >>
 >> grid.circle(x=0.5, y=0.5, r=0.5, draw=TRUE, gp=gpar(col=5))
 >>
 >> points(0.5, 0.5, col = 5) # centre of the circle
 >>
 >>
 >>
 >> , but all circles moved away from the centre.  Could we do any
 >> corrections to this? Thanks.
 >>
 >>
 >>
 >> Regards,
 >>
 >>
 >>
 >> Jin
 >>
 >> ==========================
 >>
 >> Jin Li, PhD
 >>
 >> Climate Impacts Modeller
 >>
 >> CSIRO Sustainable Ecosystems
 >>
 >> Atherton, QLD 4883
 >>
 >> Australia
 >>
 >> Ph: 61 7 4091 8802
 >>
 >> Email: jin.li at csiro.au <mailto:jin.li at csiro.au>
 >>
 >> ==========================
 >>
 >>
 >>
 >>
 >> [[alternative HTML version deleted]]
 >>
 >> ______________________________________________
 >> R-help at stat.math.ethz.ch mailing list
 >> https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the
 >> posting guide! http://www.R-project.org/posting-guide.html
 >>
 >> ______________________________________________
 >> R-help at stat.math.ethz.ch mailing list
 >> https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the
 >> posting guide! http://www.R-project.org/posting-guide.html
 >>
 >> ______________________________________________
 >> R-help at stat.math.ethz.ch mailing list
 >> https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the
 >> posting guide! http://www.R-project.org/posting-guide.html
 >
 >
 >
#
It has been a while since I looked at those two sources. My main impetus 
has been the detail. I think that one of the aims of my project has been 
  to document the variants that might not be given a name. I have a 
function called tufte158 (Tufte, The Visual Display of Quantitative 
Information p. 158) In essence it's just a very simple line plot. 
However I have done quite a lot of work automating label positioning, so 
they do not to overlap. So while it is dead easy to produce the basic 
plot, getting it to publication standard, is not as easy. I have quite a 
lot of hybrid graphics that do not immediately look like plots. I guess 
these are best described as customised plots, which often are only good 
for the specific purpose, even though the components often reappear.

I think I would be trying to add to these sources, although it's not 
easy to see what would be the best method.

I will go back to my idea and after a thorough search through the 
existing stuff I might try to verbalise the idea again.

Thanks

Tom
Paul Murrell wrote:
...
...