[R] multiple graphs with a single legend and trellis graph
Rosa Oliveira
rosita21 at gmail.com
Wed Jul 8 15:27:35 CEST 2015
Dear Jim,
first of all, thank you very much :)
can you please explain me how to use split.screen?
I’m felling so silly, I could not run your example because of x11(width=10,height=4). I already installed package XQuartz because X11 library was missing , nonetheless, after I have installed it, “ Error in .External2(C_X11, d$display, d$width, d$height, d$pointsize, :
unable to start device X11
In addition: Warning message:
In x11(width = 10, height = 4) :
unable to open connection to X11 display ‘'"
I didn’t started the x11 server on my mac ;)
Now I got the graphs ;)
I attach my previous graphs and my data, so you can see :)
I’m very naive and new in R :(
Thanks again for your help ;)
Atenciosamente,
Rosa Oliveira
Atenciosamente,
Rosa Oliveira
--
____________________________________________________________________________
Rosa Celeste dos Santos Oliveira,
E-mail: rosita21 at gmail.com
Tlm: +351 939355143
Linkedin: https://pt.linkedin.com/in/rosacsoliveira
____________________________________________________________________________
"Many admire, few know"
Hippocrates
> On 08 Jul 2015, at 11:20, Jim Lemon <drjimlemon at gmail.com> wrote:
>
> Hi Rosa,
> As you are using base graphics, here is an example that might be of
> use. As we don't have access to your data, I have used something
> similar to the toy data in the example for the "panes" function. This
> could be done better using the "split.screen" function, so let me know
> if you would like an example using that.
>
> library(plotrix)
> # start a wide plotting device
> x11(width=10,height=4)
> y<-runif(100)
> oldpar<-panes(matrix(1:6,nrow=2,byrow=TRUE),widths=c(1,1,1.7))
> par(mar=c(0,2,1.8,0))
> boxplot(y,axes=FALSE)
> axis(2)
> box()
> par(mar=c(0,0,1.8,0))
> tab.title("Boxplot of y",tab.col="#88dd88",cex=1)
> y_hist<-hist(y,axes=FALSE,breaks=seq(0,1,length.out=5))
> box()
> tab.title("Histogram of y",tab.col="#dd8800",cex=1)
> par(mar=c(0,0,1.8,12))
> pie(y_hist$counts,col=2:9)
> tab.title("Pie chart of y categories",tab.col="#8888dd",cex=1)
> box()
> par(mar=c(2,2,1.8,0))
> plot(y,xaxs="i",xlim=c(0,101),axes=FALSE,col=2:9)
> axis(2)
> box()
> tab.title("Scatterplot of y",tab.col="#aabbcc",cex=1)
> par(mar=c(2,0,1.8,0))
> plot(sort(y),xaxs="i",xlim=c(0,101),axes=FALSE,col=2:9)
> box()
> tab.title("Scatterplot of y sorted",tab.col="#ddbc44",cex=1)
> # center the title at the middle of the fifth plot
> mtext("Overall title of plot",side=1,line=0.8,cex=1.5)
> par(mar=c(2,0,1.8,12))
> plot(diff(y),xaxs="i",xlim=c(0,100),axes=FALSE,col=2:9)
> axis(4)
> box()
> tab.title("Scatterplot of diff(y)",tab.col="#ff33cc",cex=1)
> legend(115,1.8,
> c("Boxplot","Histogram","Pie chart","Scatterplot","Sort","Diff"),
> fill=c("#88dd88","#dd8800","#8888dd","#aabbcc","#ddbc44","#ff33cc"),
> xpd=NA)
>
> Jim
>
>
>
>
> On Wed, Jul 8, 2015 at 1:05 PM, David Winsemius <dwinsemius at comcast.net> wrote:
>>
>> On Jul 7, 2015, at 2:45 PM, Rosa Oliveira wrote:
>>
>>> Iam trying to plot 6 graphs in one single plot and I was able to, nonetheless I wanted that all graphs had just 1 common legend, as the legend is the same for all the 6 graphs and there is no sense in repeating it 6 times and even more, the legends in each graph sometimes don’t fit the graph.
>>>
>>> Is there a way to put just one legend for all the 6 graphs ate the same time?
>>>
>>> I was told to use a trellis graph, but after days of trying to do that I wasn’t able to.
>>>
>>> Can anyone help me?
>>>
>>>
>>> library(ggplot2)
>>> library(reshape)
>>
>>
>>> library(lattice)
>>
>> Why did you load those packages above? As far as I can see you did not use any lattice or ggplot2 functions. (Also see no reshape or reshape2 functions in use.)
>>
>>> par(mfrow=c(2,3))
>>> mse.alpha1 <-read.csv(file="graphs_mse_alpha1.csv",head=TRUE,sep=",")
>>
>> And there you lose us. We are unable to see your data. The `legend` function can put the legend anywhere. You may need to set par(xpd=TRUE) if the location is outside the current plot area. If you wnated just one legend then you mus ask yourself why you are issuing multiple legend calls. I see the token-`legend` a total of 12 times in the code below.
>>
>>
>>> attach(mse.alpha1)
>>> names(mse1000.alpha1)
>>> mse.alpha2 <-read.csv(file="graphs_mse_alpha2.csv",head=TRUE,sep=",")
>>> attach(mse.alpha2)
>>> names(mse.alpha2)
>>> nsample==50
>>>
>>> plot(mse.alpha1$lambda[mse.alpha1$nsample==50],
>>> mse.alpha1$mse.naive[mse.alpha1$nsample==50],
>>> xlab=expression(paste(lambda)),ylab="MSE",type="l",col=4,lty=4,
>>> xlim=c(.6,1), ylim=c(0,1), cex.lab=1.5
>>> )
>>> lines(mse.alpha1$lambda[mse.alpha1$nsample==50],mse.alpha1$mse.RegCal[mse.alpha1$nsample==50],col=2,lty=2)
>>> lines(mse.alpha1$lambda[mse.alpha1$nsample==50],mse.alpha1$mse.PL[mse.alpha1$nsample==50],col=3,lty=3)
>>> title ( expression (paste ("Mean squared error for ", alpha[1])), cex.main=1.5)
>>> title("\n\n sample size=50")
>>> legend(.7,1, legend= c("Naive", "Regression Calibration", "Pseudo Likelihood"), bty = "n",col=c(4,2,3),lty=c(4,2,3))
>>>
>>> plot(mse.alpha1$lambda[mse.alpha1$nsample==250],
>>> mse.alpha1$mse.naive[mse.alpha1$nsample==250],
>>> xlab=expression(paste(lambda)),ylab="MSE",type="l",col=4,lty=4,
>>> xlim=c(.6,1), ylim=c(0,1), cex.lab=1.5
>>> )
>>> lines(mse.alpha1$lambda[mse.alpha1$nsample==250],mse.alpha1$mse.RegCal[mse.alpha1$nsample==250],col=2,lty=2)
>>> lines(mse.alpha1$lambda[mse.alpha1$nsample==250],mse.alpha1$mse.PL[mse.alpha1$nsample==250],col=3,lty=3)
>>> title ( expression (paste ("Mean squared error for ", alpha[1])), cex.main=1.5)
>>> title("\n\n sample size=250")
>>> legend(.7,1, legend= c("Naive", "Regression Calibration", "Pseudo Likelihood"), bty = "n",col=c(4,2,3),lty=c(4,2,3))
>>>
>>>
>>> plot(mse.alpha1$lambda[mse.alpha1$nsample==1000],
>>> mse.alpha1$mse.naive[mse.alpha1$nsample== 1000],
>>> xlab=expression(paste(lambda)),ylab="MSE",type="l",col=4,lty=4,
>>> xlim=c(.6,1), ylim=c(0,1), cex.lab=1.5
>>> )
>>> lines(mse.alpha1$lambda[mse.alpha1$nsample== 1000],mse.alpha1$mse.RegCal[mse.alpha1$nsample== 1000],col=2,lty=2)
>>> lines(mse.alpha1$lambda[mse.alpha1$nsample== 1000],mse.alpha1$mse.PL[mse.alpha1$nsample== 1000],col=3,lty=3)
>>> title ( expression (paste ("Mean squared error for ", alpha[1])), cex.main=1.5)
>>> title("\n\n sample size=1000")
>>> legend(.7,1, legend= c("Naive", "Regression Calibration", "Pseudo Likelihood"), bty = "n",col=c(4,2,3),lty=c(4,2,3))
>>>
>>> plot(mse.alpha2$lambda[mse.alpha2$nsample==50],
>>> mse.alpha2$mse.naive[mse.alpha2$nsample==50],
>>> xlab=expression(paste(lambda)),ylab="MSE",type="l",col=4,lty=4,
>>> xlim=c(.6,1), ylim=c(0,.17), cex.lab=1.5
>>> )
>>> lines(mse.alpha2$lambda[mse.alpha2$nsample==50],mse.alpha2$mse.RegCal[mse.alpha2$nsample==50],col=2,lty=2)
>>> lines(mse.alpha2$lambda[mse.alpha2$nsample==50],mse.alpha2$mse.PL[mse.alpha2$nsample==50],col=3,lty=3)
>>> title ( expression (paste ("Mean squared error for ", alpha[2])), cex.main=1.5)
>>> title("\n\n sample size=50")
>>> legend(.7,.17, legend= c("Naive", "Regression Calibration", "Pseudo Likelihood"), bty = "n",col=c(4,2,3),lty=c(4,2,3))
>>>
>>>
>>> plot(mse.alpha2$lambda[mse.alpha2$nsample==250],
>>> mse.alpha2$mse.naive[mse.alpha2$nsample==250],
>>> xlab=expression(paste(lambda)),ylab="MSE",type="l",col=4,lty=4,
>>> xlim=c(.6,1), ylim=c(0,.17), cex.lab=1.5
>>> )
>>> lines(mse.alpha2$lambda[mse.alpha2$nsample==250],mse.alpha2$mse.RegCal[mse.alpha2$nsample==250],col=2,lty=2)
>>> lines(mse.alpha2$lambda[mse.alpha2$nsample==250],mse.alpha2$mse.PL[mse.alpha2$nsample==250],col=3,lty=3)
>>> title ( expression (paste ("Mean squared error for ", alpha[2])), cex.main=1.5)
>>> title("\n\n sample size=250")
>>> legend(.7,.17, legend= c("Naive", "Regression Calibration", "Pseudo Likelihood"), bty = "n",col=c(4,2,3),lty=c(4,2,3))
>>>
>>> plot(mse.alpha2$lambda[mse.alpha2$nsample==1000],
>>> mse.alpha2$mse.naive[mse.alpha2$nsample== 1000],
>>> xlab=expression(paste(lambda)),ylab="MSE",type="l",col=4,lty=4,
>>> xlim=c(.6,1), ylim=c(0,.17), cex.lab=1.5
>>> )
>>> lines(mse.alpha2$lambda[mse.alpha2$nsample== 1000],mse.alpha2$mse.RegCal[mse.alpha2$nsample==250],col=2,lty=2)
>>> lines(mse.alpha2$lambda[mse.alpha2$nsample== 1000],mse.alpha2$mse.PL[mse.alpha2$nsample== 1000],col=3,lty=3)
>>> title ( expression (paste ("Mean squared error for ", alpha[2])), cex.main=1.5)
>>> title("\n\n sample size=1000")
>>> legend(.7,.17, legend= c("Naive", "Regression Calibration", "Pseudo Likelihood"), bty = "n",col=c(4,2,3),lty=c(4,2,3))
>>>
>>
>>
>>
>> David Winsemius
>> Alameda, CA, USA
>>
>> ______________________________________________
>> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see
>> 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