Patrick Joyce
2013-Jul-05 21:55 UTC
[R] surface plots using wireframe, color at high res, grid at low res?
Hello, I'm working on some simple copula plots for a poster presentation, and by simple I mean simple, gaussian, etc., etc., etc. I know I might be taking this a bit too far but I'm trying to see if I can overlay one surface plot over another. I want to use color but I like the addition of a black wireframe to hold together a better sense of shape. Right now, I have it set up to create a 300x300 colored surface using col="transparent", and I'd like to add a n x n (10, 20, whatever) on top of this. Right now I'm using wireframe and I'm using my employer's official colors for gradient coloring. My code is below. I apologize for the code length but it does execute the way I want from a new session. I'm also curious as to why I'm some grid effects or lighting effects (unsure of which) that I'm using on my personal 3.0.1 copy on Mountain Lion OSX, that I wasn't getting on 2.14.1 on Windows XP... something to figure out for another time. This is a much more secondary concern for which I have a solution (compile the final graphic at work). For now I'm just trying to see if its possible to lay a smaller resolution grid over the colored high resolution grid. I will say that other help documents have been very useful to get the code along to this point. Sincerely, Patrick Joyce Work e-mail: patrick.m.joyce@census.gov library(RColorBrewer) library(colorspace) library(lattice) normal.copula=function(u1,u2,rho){ x1=qnorm(u1) x2=qnorm(u2) 1/(2*pi)/sqrt(1-rho^2)*exp(-1/2*(x1^2+x2^2-rho*x1*x2)/(1-rho^2))/dnorm(x1)/dnorm(x2) } new.census.red="#AB0537" new.census.blue="#0A6FB7" ncred=hex2RGB(new.census.red) ncblue=hex2RGB(new.census.blue) ncwhite=hex2RGB("#FFFFFF") census.color.function=function(alpha.cen){ out.hex=ifelse(alpha.cen<.5,hex(mixcolor(2*alpha.cen,ncblue,ncwhite),fixup=TRUE),ifelse(alpha.cen==.5,"#FFFFFF",hex(mixcolor(2*alpha.cen-1,ncwhite,ncred),fixup=TRUE))) out.hex } rho.boat=.7 n.cuts=300 u1.corrd=(1:n.cuts-.5)/n.cuts u2.corrd=(1:n.cuts-.5)/n.cuts shareframe=data.frame(expand.grid(u1.corrd,u2.corrd)) shareframe$z.dir=normal.copula(shareframe$Var1,shareframe$Var2,rho.boat) names(shareframe)=c("u1.dir","u2.dir","z.dir") plot.new() wireframe(shareframe$z.dir~ shareframe$u1.dir*shareframe$u2.dir, xlab = expression(U[1]), ylab = expression(U[2]), zlab="Density",main=" ", scales = list(arrows=FALSE,col=1), drape = c(TRUE), par.settings=list(axis.line=list(col="transparent")),col="transparent",colorkey = FALSE, screen = list(z = 195,y=180, x = 105),col.regions = census.color.function((1:10000-.5)/10000)) [[alternative HTML version deleted]]
Duncan Mackay
2013-Jul-06 22:04 UTC
[R] surface plots using wireframe, color at high res, grid at low res?
Hi Patrick You should do better by using a specific graphic device and then send the file to the printer ... n.cuts=300 u1.corrd=(1:n.cuts-.5)/n.cuts u2.corrd=(1:n.cuts-.5)/n.cuts shareframe=data.frame(expand.grid(u1.corrd,u2.corrd)) shareframe$z.dir=normal.copula(shareframe$Var1,shareframe$Var2,rho.boat) names(shareframe)=c("u1.dir","u2.dir","z.dir") trellis.device(device = postscript, file = "copula1.ps", title = "", colormodel = "srgb") wireframe(shareframe$z.dir~ shareframe$u1.dir*shareframe$u2.dir, scales = list(arrows=FALSE,col=1), drape = c(TRUE), par.settings=list(axis.line=list(col="transparent")), col="transparent", colorkey = FALSE, paper = "special", horizontal = "FALSE", height = 18, width =18, screen = list(z = 195,y=180, x = 105), col.regions = census.color.function((1:10000-.5)/10000), xlab = expression(U[1]), ylab = expression(U[2]), zlab="Density",main=" " ) dev.off() see ?trellis.device and ?Devices You will have to modify the arguments to suit the graph and your device. If you use a device like png use a high resolution value HTH Duncan Duncan Mackay Department of Agronomy and Soil Science University of New England Armidale NSW 2351 Email: home: mackay at northnet.com.au At 07:55 6/07/2013, you wrote:>Hello, > >I'm working on some simple copula plots for a poster presentation, >and by simple I mean simple, gaussian, etc., etc., etc. > >I know I might be taking this a bit too far but I'm trying to see if >I can overlay one surface plot over another. I want to use color >but I like the addition of a black wireframe to hold together a >better sense of shape. > >Right now, I have it set up to create a 300x300 colored surface >using col="transparent", and I'd like to add a n x n (10, 20, >whatever) on top of this. Right now I'm using wireframe and I'm >using my employer's official colors for gradient coloring. My code >is below. I apologize for the code length but it does execute the >way I want from a new session. > >I'm also curious as to why I'm some grid effects or lighting effects >(unsure of which) that I'm using on my personal 3.0.1 copy on >Mountain Lion OSX, that I wasn't getting on 2.14.1 on Windows XP... >something to figure out for another time. This is a much more >secondary concern for which I have a solution (compile the final >graphic at work). For now I'm just trying to see if its possible to >lay a smaller resolution grid over the colored high resolution grid. > >I will say that other help documents have been very useful to get >the code along to this point. > >Sincerely, > >Patrick Joyce > >Work e-mail: patrick.m.joyce at census.gov > > >library(RColorBrewer) >library(colorspace) > > >library(lattice) > >normal.copula=function(u1,u2,rho){ > >x1=qnorm(u1) >x2=qnorm(u2) > >1/(2*pi)/sqrt(1-rho^2)*exp(-1/2*(x1^2+x2^2-rho*x1*x2)/(1-rho^2))/dnorm(x1)/dnorm(x2) > >} > >new.census.red="#AB0537" >new.census.blue="#0A6FB7" > >ncred=hex2RGB(new.census.red) >ncblue=hex2RGB(new.census.blue) >ncwhite=hex2RGB("#FFFFFF") > >census.color.function=function(alpha.cen){ >out.hex=ifelse(alpha.cen<.5,hex(mixcolor(2*alpha.cen,ncblue,ncwhite),fixup=TRUE),ifelse(alpha.cen==.5,"#FFFFFF",hex(mixcolor(2*alpha.cen-1,ncwhite,ncred),fixup=TRUE))) > >out.hex > >} > >rho.boat=.7 > >n.cuts=300 >u1.corrd=(1:n.cuts-.5)/n.cuts >u2.corrd=(1:n.cuts-.5)/n.cuts >shareframe=data.frame(expand.grid(u1.corrd,u2.corrd)) >shareframe$z.dir=normal.copula(shareframe$Var1,shareframe$Var2,rho.boat) >names(shareframe)=c("u1.dir","u2.dir","z.dir") > >plot.new() >wireframe(shareframe$z.dir~ shareframe$u1.dir*shareframe$u2.dir, > xlab = expression(U[1]), ylab = expression(U[2]), zlab="Density",main=" ", > >scales = list(arrows=FALSE,col=1), > drape = c(TRUE), > >par.settings=list(axis.line=list(col="transparent")),col="transparent",colorkey >= FALSE, > screen = list(z = 195,y=180, x = 105),col.regions = > census.color.function((1:10000-.5)/10000)) > > > [[alternative HTML version deleted]] > >______________________________________________ >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.