[R] Changing a plot

R Help rhelp.stats at gmail.com
Thu Sep 25 15:55:29 CEST 2008


Thanks, I looked into the grid package.  The grid package does do a
better job of managing the plotting, but it's still re-plotting the
entire canvas whenever a modifcation is made to a plot.

I guess I should have been a little clearer with my question.  Here's
a sample function.

library(tcltk)
x = runif(10000)
y = runif(10000)
v1 <- viewport()
grid.rect(gp = gpar(lty = "dashed"))
pushViewport(plotViewport(c(5.1, 4.1, 4.1, 2.1)))
pushViewport(dataViewport(x, y))
grid.rect()
grid.xaxis()
grid.yaxis()
grid.points(x, y)
grid.text("1:10", x = unit(-3, "lines"), rot = 90)
v2 <- viewport()
push.viewport()
grid.points(x[1],y[1],pch=16,gp=gpar(col='green'),name='pts')
index = tclVar(1)
grid
refresh <- function(...){
  i <- as.numeric(tclvalue(index))
  grid.edit('pts',x=unit(x[i],'npc'),y=unit(y[i],'npc'))

}
m <- tktoplevel()
pScale <- tkscale(m,from=0,to=10000,orient='horiz',resolution=1,variable=index,command=refresh)
tkgrid(pScale)

The green point should change as the slider is moved, but there are so
many points in the background that replotting them confuses the
graphic.  What I want to be able to do is replt the green point
without removing the background.

Sam Stewart

On Wed, Sep 24, 2008 at 11:12 AM, Ben Bolker <bolker at ufl.edu> wrote:
> R Help <rhelp.stats <at> gmail.com> writes:
>
>>
>> Hello list,
>>
>> I've been working on this problem for a while and I haven't been able
>> to come up with a solution.
>>
>> I have a couple of functions that plot a bunch of data, then a single
>> point on top of it.  What I want is to be able to change the plot of
>> the point without replotting all the data.  Consider the following
>> example:
>>
>> x = rnorm(100,1,0.5)
>> y = rnorm(100,1,0.5)
>> plot(x,y,pch=16)
>> points(x[35],y[35],pch=19,col=6,cex=3)
>>
>> What I want to be able to do is to change the purple point to a
>> different value without replotting everything.
>>
>
>  R's default (base) graphics model is a 'canvas' -- things get
> drawn, but nothing ever gets erased. (The cheap solution is
> to overplot in the background color, but that
> won't work if there's stuff underneath the point
> that you want to preserve.) You probably need to move
> to the grid graphics package (hint: buy or borrow Paul Murrell's
> book) to do something like this.
>
>  Ben Bolker
>
> ______________________________________________
> R-help at 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.
>



More information about the R-help mailing list