Megh Dal
2008-May-06 14:31 UTC
[R] How to put different color in some portion of a surface plot?
Hi all, I have following problem : a = b = seq(1, 50000, by=500) v = matrix(0, nrow=length(a), ncol=length(a)) for (i in 1:length(a)) { for (j in 1:length(a)) { d = c(17989*a[i], -18109*b[j]) v[i,j] = t(d) %*% matrix(c(0.0001741, 0.0001280, 0.0001280, 0.0002570), nrow=2) %*% d } } library("rgl") open3d() persp3d(a,b,v,col="green",alpha=0.7,aspect=c(1,1,0.5)) Now I want to shed the portion with different color of the surface which satisfy following condition: 0 < (a-b) < max(a) Can anyone please tell me how to do that? Regards, --------------------------------- [[elided Yahoo spam]] [[alternative HTML version deleted]]
Duncan Murdoch
2008-May-06 14:52 UTC
[R] How to put different color in some portion of a surface plot?
On 5/6/2008 10:31 AM, Megh Dal wrote:> Hi all, > > I have following problem : > > a = b = seq(1, 50000, by=500) > v = matrix(0, nrow=length(a), ncol=length(a)) > for (i in 1:length(a)) > { > for (j in 1:length(a)) > { > d = c(17989*a[i], -18109*b[j]) > v[i,j] = t(d) %*% matrix(c(0.0001741, 0.0001280, 0.0001280, 0.0002570), nrow=2) %*% d > } > } > library("rgl") > open3d() > persp3d(a,b,v,col="green",alpha=0.7,aspect=c(1,1,0.5)) > > > Now I want to shed the portion with different color of the surface which satisfy following condition: > > 0 < (a-b) < max(a) > > Can anyone please tell me how to do that?The col option can be a matrix of the same shape as v, giving the colour at each vertex. (Note that this is different from persp(), which gives the colour in each cell, i.e. one less in each dimension. The persp3d man page tells how to duplicate the persp() behaviour.) For example, shade <- outer(a, b, function(x,y) (0 < (x-y)) & ((x-y) < max(a))) persp3d(a,b,v,col=ifelse(shade, "red", "green"), alpha=0.7,aspect=c(1,1,0.5)) Duncan Murdoch