Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
457 views
in Technique[技术] by (71.8m points)

r - Manually defining the colours of a wireframe

I am plotting some surfaces in R using the lattice package. I can't find a way to choose the colours of the surface. Here is an example:

enter image description here

Here is an example of how i plot each:

theseCol=heat.colors(150)
mm=paste("WB numbers where present
(",nstoch," sims)",sep="")
WBnumbers=wbPrev_series
rownames(WBnumbers)=KList
colnames(WBnumbers)=iMwbList
wireframe(WBnumbers, zlim=c(0,max(wbPrev_series,na.rm=TRUE)), colorkey=FALSE, 
                    col.regions=theseCol, scales = list(arrows = FALSE), drape = TRUE, 
                    main=mm,  zlab="", xlab="K", ylab="iMwb")

I would like for the first surface to be as it is, but for the others to be coloured not by their z levels but by the 1st surface's z levels. I tried multiple things but wireframe always accepts the colours i give as the possible ranges for the current variable.

Anyway this could be done? Thanks

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

Here is the answer Dave W. posted some years back on the R-help mailing list. You probably can google up the entire thread.

From: David Winsemius Following the advice in help(wirefrane) you need to look at the
levelplot section for advice re: a proper specification to colorkey
and follow the appropriate links in the help pages. Whether your data
is a proper input to wireframe cannot be determined from the included
information, although I suppose your reported success suggests it is.

This is an untested (since there was nothing to test) wild-assed guess
after reading the material I pointed to:

wireframe(data.m,aspect = c(0.3), shade=TRUE, screen = list(z = 0, x =  
-45),
    light.source = c(0,0,10), distance =  
0.2,zlab="Freq",xlab="base",ylab="Fragment",
    col=level.colors(x, at = do.breaks(range(data.m), 30),
                     col.regions = colorRampPalette(c("red", "white",  
"blue")(30))
       )

EDIT: Per Josh's request, I played around a bit. The following will apply color shading (drape):

wireframe(dmat,drape=TRUE,col='black',col.regions = colorRampPalette(c("red", "white",  "blue"))(30) )

Which sets the "drape" colors but not the gridlines themselves. It's a darn shame that wireframe doesn't respect par(new=TRUE), because if it did we could slice the data matrix into z-ranges and overplot one color at a time.

I will have to check my "archive" of old experiments w/ R graphics when I get home, but I think I ended up using the scatterplot3d package to get data-dependent grid colors.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...