[R] Problem with plotting size/location on variation of star/segment plot

Shelby Berkowitz berkowi4 at msu.edu
Tue Mar 8 02:23:39 CET 2005


Beautiful!!!  Thanks so much, Uwe!

[Notes for anyone else stumbling across similar issues in the future:
After making the change Uwe suggested, I realized a couple of things:
first, the plot.new() commands were redundant with add=F in place.
Second, I was still scratching my head for a few minutes wondering why
some of my plots now fit perfectly while others were still a bit too big
for the frame (though not as bad as before).  Then I put 2 and 2
together based on a hint in Uwe's message: the first plot command in the
series was driving the dimension calculations.  So...plots that had one
or more data points at the full radius of my post-plotted axes ended up
fine, others ended up too big once the final gridlines were added.  The
solution of course was to make the first stars() command a plot of the
major-gridline axis with invisible lines.  Revised code follows.]

par(mfrow=c(2,2), mar=c(1,0,1,0),oma=c(2,2,2,2))
## code segment for each separate radar chart within frame
majgrid <- matrix(rep((c(1:10)*.1),ncol(DF)),nrow=10,byrow=F)
mingrid <- matrix(rep((c(1:10)*.1-.05),ncol(DF)),nrow=10,byrow=F)
stars(majgrid, locations = 0:1, scale=F, draw.segments = TRUE,
add=FALSE, lty=0, col.segments=0,main="Plot Title")
stars(DF[seriesindex1,], locations=0:1,full = TRUE, scale = F,
draw.segments=TRUE, add=TRUE,col.segments=heatshades[7])
stars(DF[seriesindex2,], locations=0:1,full = TRUE, scale = F,
draw.segments=TRUE, add=TRUE,col.segments=heatshades[3])
stars(majgrid, locations = 0:1, scale=F, draw.segments = TRUE, add=T,
lty=1, col.segments=0,lwd=1.5)
stars(mingrid, locations = 0:1, scale=F, draw.segments = TRUE, add=T,
lty=2, col.segments=0,lwd=1)
###rinse and repeat as needed

Warmly,

Shelby

>-----Original Message-----
>From: Uwe Ligges [mailto:ligges at statistik.uni-dortmund.de] 
>Sent: Saturday, March 05, 2005 1:49 PM
>To: Shelby Berkowitz
>Cc: r-help at r-project.org
>Subject: Re: [R] Problem with plotting size/location on 
>variation of star/segment plot
>
>
>Shelby Berkowitz wrote:
>
>> Dear R gurus,
>> 
>> I'm running into a problem with some modified segment plots 
>I've coded 
>> using stars().  What I am trying to do is superimpose two series of 
>> data along with radial axes markers in a 2x2 graphics frame. 
> This is 
>> working fine now, except for the hitch: my plots overfill the frame 
>> and are not centered within it (on my runs they always end 
>up looking 
>> like they've been budged up and to the left).  They're also a little 
>> warped-looking (more oval than perfectly round).
>> 
>> - I don't think this is a problem with my par() settings, as I've 
>> checked them out and they don't look suspicious.  Also, I've tested 
>> generating other plots (e.g., dummy histograms) on the same 
>device and 
>> they fit perfectly.  It's also not a problem with fitting stars() 
>> plots into a par(mfrow=c(2,2) frame, as I get the same 
>offset/overflow 
>> when I run just one plot on a mfrow=c(1,1) frame.
>> - I don't think it's a problem with the windows graphics 
>device, as I 
>> tried plotting to other devices (e.g., postscript) and get the same 
>> results.
>> - Thus, I'm pretty sure this comes down to something funky with the 
>> way I'm using stars().  My runs of examples from stars() fit just as 
>> they should inside their graphics frames, but as far as I 
>can see, the 
>> individual calls to stars() below don't look materially 
>different from 
>> the ones in the examples.
>> 
>> At this point, I'm completely stumped.  Can someone please point me 
>> towards what I might be doing wrong here?  Any and all 
>advice will be 
>> most humbly appreciated! BTW, I'm running R 2.00 on Windows XP, all 
>> packages updated.
>> 
>> Example version of my code is pasted below (the loop is for example 
>> purposes only):
>> 
>> ##begin sample code
>> par(mfrow=c(2,2))
>> for (i in 1:4) {
>> 	## generate sample data for plot:
>> 	a<- sample(c(20:70)*.01,18)
>> 	testA <-
>> as.data.frame(rbind(a,a+((1-a)*sample(c(1:10)*.1,18,replace=T))))
>> 	## open new plot space
>> 	plot.new()
>> 	## plot data series:
>> 	stars(testA[2,], locations=0:1,full = TRUE, scale = F, 
>> draw.segments=TRUE, add=TRUE,col.segments=heatshades[7])
>
>Well, since you have neither called plot.window() nor stars() with 
>"add=FALSE"), the dimensions have not been set up correctly.
>
>In the first call above, simply say add = FALSE.
>
>Uwe Ligges
>
>
>
>> 	stars(testA[1,], locations=0:1,full = TRUE, scale = F, 
>> draw.segments=TRUE, add=TRUE,col.segments=heatshades[3])
>> 	majgrid <- matrix(rep((c(1:10)*.1),ncol(testA)),nrow=10,byrow=F)
>> 	## generate and plot radar grid:
>> 	mingrid <-
>> matrix(rep((c(1:10)*.1-.05),ncol(testA)),nrow=10,byrow=F)
>> 	stars(majgrid, locations=0:1, scale=F, draw.segments = 
>TRUE, add=T, 
>> lty=1, col.segments=0)
>> 	stars(mingrid, locations=0:1, scale=F, draw.segments = 
>TRUE, add=T, 
>> lty=2, col.segments=0)}
>> par(mfrow=c(1,1))
>> ##end sample code
>> 
>> Thank you,
>> 
>> Shelby
>> 
>> ===============================
>> Shelby L. Berkowitz
>> Ecological-Community Psychology
>> and Institute for Health Care Studies
>> Michigan State University
>> berkowi4 at msu.edu




More information about the R-help mailing list