[R] adding points to a wireframe

Deepayan Sarkar deepayan.sarkar at gmail.com
Sat Aug 22 10:15:40 CEST 2009


On 8/18/09, Jarrett Byrnes <byrnes at msi.ucsb.edu> wrote:
> A quick question.  I'm trying to plot a surface from a fitted model along
> with the original points, as in the following example:
>
>
>  df<-data.frame(expand.grid(100*runif(1:100),
> 100*runif(1:100)))
>  df$Var3<-rnorm(length(df$Var1), mean=df$Var1*df$Var2,
> sd=10)
>
>  my.lm<-lm(Var3 ~ Var1*Var2, data=df)
>
>  my.fun<-function(x,y) predict(my.lm, data.frame(Var1=x, Var2=y),
> type="response")
>
>  df2<-data.frame(expand.grid(x=seq(1,100,10),
> y=seq(1,100,10)))
>  df2$z<-my.fun(df2$x, df2$y)
>
>  wireframe(z ~ x*y, data=df2, col="grey",
>  panel.3d.wireframe=function(x,y,z,...){
>         panel.3dwire(x = x, y = y, z = z, ...)
>         panel.3dscatter(x=df$Var1,
>                                         y=df$Var2,
>                                         z=df$Var2,
>                                         ...)
>  })
>
>  Which I coded according to what I saw here:
> http://www.nabble.com/add-points-to-wireframe-td12901155.html
> http://www.nabble.com/wireframe---add-data-points-td16984174.html

You are missing the part (in the second message) where you need to
rescale df$Var[123] to match the scale of x, y, z (which have been
already rescaled).

>  However, this plots the wireframe, then puts the error message:
>  Error using packet 1
>  'x' and 'units' must have length > 0
>
>  Any thoughts on what is incorrect here?

No error for me (but with wrong scales of course). Perhaps your
version of R is not up to date? What does sessionInfo() give you?

-Deepayan




More information about the R-help mailing list