R-beta: Switching between plots without erasing them.

Ross & ihaka at stat.auckland.ac.nz
Tue Jul 1 05:43:47 CEST 1997


Richard Lammers writes:
 > 
 > I originally sent this to the list a week ago.  Should I assume the lack
 > of response was due to an inappropriate question, or that this cannot be
 > done?

Perfectly appropriate.  I'm the person largely guilty of perpertrating
the R graphics software, and I've been out sick.

 > ---------- Forwarded message ----------
 > Date: Sat, 21 Jun 1997 11:09:21 -0400 (EDT)
 > From: Richard Lammers <lammers at edac.sr.unh.edu>
 > To: r-help at stat.math.ethz.ch
 > Subject: R-beta: Switching between plots without erasing them. 
 > 
 > 
 > 
 > I have a question relating to switching between plots within the graphics
 > window [x11()].  If this is not appropriate for this mailing list then
 > please let me know. 
 > 
 > What I am doing now:
 > 
 > Opening a graphics window and setting two plot regions [ie with
 > par(mfrow=c(2,1))].  In the top section there is a plot with a set of
 > points which represent river gauges located by latitude and longitude
 > pairs. These points are global in extent so I am also using continent
 > boundaries from a data set found on Statlib.  Because there are so many
 > points this takes some time to draw.  Using the identify() function a
 > point is selected and in the lower plot a time series is displayed from
 > that particular river gauge.  This is in a loop which allows repeated
 > clicks on the map and time series plots.  Each time through the loop, the
 > map must be redrawn.
 > 
 > I would like to do the following:
 > 
 > I would like to keep the upper plot (the map) intact while being able to
 > completely redraw the lower plot (the time series).  Is there some way I
 > can return to the upper plot and invoke the identify function without
 > erasing the map? The function frame() erases the plot.  I suppose the
 > alternative would be to have two independent graphics windows, but I am
 > not sure if that is possible within R. 

Hmmm.  This should certainly be possible.  There are two possible
approaches.

    a)	use par(mfrow=c(2,1)) and then manually set the graph
	you want to work in using par(mfg=...)).  This appears to be
	broken, but I will fix it.

    b)	Set the plotting region explicitly using par(fig=...)

	# Set up upper plot
	par(fig=c(0,1,0.5,1))
	# do upper plot
	save.usr <- par("usr")

	while(TRUE) {
		# Reset upper plot
		par(fig=c(0,1,0.5,1))
		par(new=T)
		par(usr=save.usr)
		# identify upper point using "locator"
		# break if outside "usr" bounds

		# Set up lower plot
		par(fig=c(0,1,0,0.5))
		par(new=T)
	
		# erase the entire lower figure
		# this will be a little tricky
		# it might be best to write a new
		# graphics function "erase"
		# I will think about this.
	
		# do new plot
	}

This is a partial way to proceed.  It might be possible to figure out
how to erase the lower region using par("usr") and par("plt"), but it
would be trivial to add a new "erase" primitive.

I will think about this some more and should have some code soon.
	Ross
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
r-help mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !)  To: r-help-request at stat.math.ethz.ch
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=



More information about the R-help mailing list