Kwesi A. Quagraine
2019-May-28 10:42 UTC
[R] URGENT help-Problem with panel barplot spacing
Hello All, I am struggling to control the spaces between barplots I have panelled. I would be grateful for any help in reducing the spaces between the plots. For instance, how I can reduce distance between 1 and 2, 2 and 3 etc. I would appreciate any help on this. Thanks Here?s a snippet of my code and attached is the current image I generate from the command; ##for djf postscript("fig_paper2_fre_obs_models_djf_1980_2013_4x3_new.eps",width=10,height=8,paper="special",horizontal=T,onefile=T) par(mfrow=c(3,4)) par(mar=c(6,11,1,2)) a =1 for (j in a) { djf.bar<- barplot(djf.gcms[,j],ylim=c(0,9),xlim=c(0,50),col=cores1,main j,type="n",font.main = 1, cex.main = 1.5,las=1, axisnames = T, width 0.8,cex.names=1.5,horiz = TRUE) abline(v=c(seq(0,50,10)),col='grey',lwd=0.2) par(new=TRUE) djf.bar<-barplot(djf.gcms[,j],ylim=c(0,9),xlim=c(0,50),col=cores1,main j,font.main = 1, cex.main = 1.5,las=1, axisnames = T, width 0.8,cex.names=1.5,horiz = TRUE) ## Add text at top of bars text(y = djf.bar, x = djf.gcms[,j], label = round(djf.gcms[,j], digits=0), pos = 4, cex = 1.2) } for (i in 2:4) { djf.bar<-barplot(djf.gcms[,i],ylim=c(0,9),xlim=c(0,50),col=cores1,main i, yaxs="i",type="n",font.main = 1, cex.main = 1.1,las=1, axisnames FALSE, width = 0.8,cex.names=1.0,horiz = TRUE) abline(v=c(seq(0,50,10)),col='grey',lwd=0.2) par(new=TRUE) djf.bar<-barplot(djf.gcms[,i],ylim=c(0,9),xlim=c(0,50),col=cores1,main i, yaxs="i",font.main = 1, cex.main = 1.1,las=1, axisnames = FALSE, width 0.8,cex.names=1.0,horiz = TRUE) text(y = djf.bar, x = djf.gcms[,i], label = round(djf.gcms[,i], digits=0), pos = 4, cex = 1.0) } b=5 for (k in b) { djf.bar<-barplot(djf.gcms[,k],ylim=c(0,9),xlim=c(0,50),col=cores1,main k,type="n",font.main = 1, cex.main = 1.1,las=1, axisnames = T, width 0.8,cex.names=1.5,horiz = TRUE) abline(v=c(seq(0,50,10)),col='grey',lwd=0.2) par(new=TRUE) djf.bar<-barplot(djf.gcms[,k],ylim=c(0,9),xlim=c(0,50),col=cores1,main k,font.main = 1, cex.main = 1.1,las=1, axisnames = T, width 0.8,cex.names=1.5,horiz = TRUE) text(y = djf.bar, x = djf.gcms[,k], label = round(djf.gcms[,k], digits=0), pos = 4, cex = 1.2) } for (n in 6:8) { barplot(djf.gcms[,n],ylim=c(0,9),xlim=c(0,50),col=cores1,main n,type="n",font.main = 1, cex.main = 1.1,las=1, axisnames = FALSE, width 0.8,cex.names=1.0,horiz = TRUE) abline(v=c(seq(0,50,10)),col='grey',lwd=0.2) par(new=TRUE) barplot(djf.gcms[,n],ylim=c(0,9),xlim=c(0,50),col=cores1,main n,font.main = 1, cex.main = 1.1,las=1, axisnames = FALSE, width 0.8,cex.names=1.0,horiz = TRUE) text(y = djf.bar, x = djf.gcms[,n], label = round(djf.gcms[,n], digits=0), pos = 4, cex = 1.0) } c = 9 for (m in c) { djf.bar<-barplot(djf.gcms[,m],ylim=c(0,9),xlim=c(0,50),col=cores1,main m,type="n",font.main = 1, cex.main = 1.1,las=1, axisnames = T, width 0.8,cex.names=1.5,horiz = TRUE) abline(v=c(seq(0,50,10)),col='grey',lwd=0.2) par(new=TRUE) djf.bar<-barplot(djf.gcms[,m],ylim=c(0,9),xlim=c(0,50),col=cores1,main m,font.main = 1, cex.main = 1.1,las=1, axisnames = T, width 0.8,cex.names=1.5,horiz = TRUE) title("Frequency (%)", line = -17.0) text(y = djf.bar, x = djf.gcms[,m], label = round(djf.gcms[,m], digits=0), pos = 4, cex = 1.2) } for (i in 10:12) { djf.bar<-barplot(djf.gcms[,i],ylim=c(0,9),xlim=c(0,50),col=cores1,main i,type="n",font.main = 1, cex.main = 1.1,las=1, axisnames = F, width 0.8,cex.names=1.0,horiz = TRUE) abline(v=c(seq(0,50,10)),col='grey',lwd=0.2) par(new=TRUE) djf.bar<-barplot(djf.gcms[,i],ylim=c(0,9),xlim=c(0,50),col=cores1,main i,font.main = 1, cex.main = 1.1,las=1, axisnames = F, width 0.8,cex.names=1.0,horiz = TRUE) #xlab="Frequency (%)" title("Frequency (%)", line = -17.0) text(y = djf.bar, x = djf.gcms[,i], label = round(djf.gcms[,i], digits=0), pos = 4, cex = 1.0) } dev.off() ------------ Try not to become a man of success but rather a man of value- Albert Einstein Kwesi A. Quagraine Department of Physics School of Physical Sciences College of Agriculture and Natural Sciences University of Cape Coast Cape Coast, Ghana Alt. Email: kwesi at csag.uct.ac.za Web: http://www.recycleupghana.org/ Office: +27 21 650 3164 Skype: quagraine_cwasi
Richard M. Heiberger
2019-May-28 17:55 UTC
[R] URGENT help-Problem with panel barplot spacing
I think this is what you want. You didn't send a reproducible example (no values for djf.gcms or for cores1). For what I think you are doing, lattice would be much simpler. It handles the repetition within each panel for you. ## generate some data djf.gcms <- matrix(sample(50, size=9*12, replace=TRUE), 9, 12) library(lattice) library(latticeExtra) djfs <- cbind(stack(data.frame(djf.gcms)), letter=factor(letters[1:9])) head(djfs) tmp <- barchart(letter ~ values | ind, group=letter, col=1:9, data=djfs, horizontal=TRUE, stack=TRUE, type="i", scales=list(x=list(alternating=FALSE, axs="i", limits=c(0,59))), origin=0, layout=c(4, 3), between=list(x=1, y=2)) + layer(panel.text(x=x+5, y, label=x)) + layer(panel.abline(v=seq(0,50,10), col="gray"), under=TRUE) tmp Rich The best place to start learning lattice is the trellis book http://geog.uoregon.edu/GeogR/pdfs/trellis.user.pdf The definitive reference is Deepayan Sarkar's book, Lattice: Multivariate Data Visualization with R https://www.e-reading.club/bookreader.php/137342/Lattice._Multivariate_Data_Visualization_with_R.pdf My book (HH2) is Heiberger, Richard M. and Holland, Burt (2015). Statistical Analysis and Data Display: An Intermediate Course with Examples in R. Springer, second edition. ISBN 978-1-4939- 2121-8. https://www.springer.com/us/book/9781493921218 See HH2 Chapter 4 Graphs for a general discussion and many examples throughout the book and in the accompanying CRAN package HH. install.packages("HH") On Tue, May 28, 2019 at 6:42 AM Kwesi A. Quagraine <starskykwesi at gmail.com> wrote:> > Hello All, > > I am struggling to control the spaces between barplots I have panelled. I > would be grateful for any help in reducing the spaces between the plots. > For instance, how I can reduce distance between 1 and 2, 2 and 3 etc. > > I would appreciate any help on this. > > Thanks > > Here?s a snippet of my code and attached is the current image I generate > from the command; > > ##for djf > postscript("fig_paper2_fre_obs_models_djf_1980_2013_4x3_new.eps",width=10,height=8,paper="special",horizontal=T,onefile=T) > > par(mfrow=c(3,4)) > par(mar=c(6,11,1,2)) > > a =1 > for (j in a) { > djf.bar<- barplot(djf.gcms[,j],ylim=c(0,9),xlim=c(0,50),col=cores1,main > j,type="n",font.main = 1, cex.main = 1.5,las=1, axisnames = T, width > 0.8,cex.names=1.5,horiz = TRUE) > abline(v=c(seq(0,50,10)),col='grey',lwd=0.2) > par(new=TRUE) > djf.bar<-barplot(djf.gcms[,j],ylim=c(0,9),xlim=c(0,50),col=cores1,main > j,font.main = 1, cex.main = 1.5,las=1, axisnames = T, width > 0.8,cex.names=1.5,horiz = TRUE) > ## Add text at top of bars > text(y = djf.bar, x = djf.gcms[,j], label = round(djf.gcms[,j], > digits=0), pos = 4, cex = 1.2) > } > > > for (i in 2:4) { > djf.bar<-barplot(djf.gcms[,i],ylim=c(0,9),xlim=c(0,50),col=cores1,main > i, yaxs="i",type="n",font.main = 1, cex.main = 1.1,las=1, axisnames > FALSE, width = 0.8,cex.names=1.0,horiz = TRUE) > abline(v=c(seq(0,50,10)),col='grey',lwd=0.2) > par(new=TRUE) > djf.bar<-barplot(djf.gcms[,i],ylim=c(0,9),xlim=c(0,50),col=cores1,main > i, yaxs="i",font.main = 1, cex.main = 1.1,las=1, axisnames = FALSE, width > 0.8,cex.names=1.0,horiz = TRUE) > text(y = djf.bar, x = djf.gcms[,i], label = round(djf.gcms[,i], > digits=0), pos = 4, cex = 1.0) > > } > > b=5 > for (k in b) { > djf.bar<-barplot(djf.gcms[,k],ylim=c(0,9),xlim=c(0,50),col=cores1,main > k,type="n",font.main = 1, cex.main = 1.1,las=1, axisnames = T, width > 0.8,cex.names=1.5,horiz = TRUE) > abline(v=c(seq(0,50,10)),col='grey',lwd=0.2) > par(new=TRUE) > djf.bar<-barplot(djf.gcms[,k],ylim=c(0,9),xlim=c(0,50),col=cores1,main > k,font.main = 1, cex.main = 1.1,las=1, axisnames = T, width > 0.8,cex.names=1.5,horiz = TRUE) > text(y = djf.bar, x = djf.gcms[,k], label = round(djf.gcms[,k], > digits=0), pos = 4, cex = 1.2) > > } > > for (n in 6:8) { > barplot(djf.gcms[,n],ylim=c(0,9),xlim=c(0,50),col=cores1,main > n,type="n",font.main = 1, cex.main = 1.1,las=1, axisnames = FALSE, width > 0.8,cex.names=1.0,horiz = TRUE) > abline(v=c(seq(0,50,10)),col='grey',lwd=0.2) > par(new=TRUE) > barplot(djf.gcms[,n],ylim=c(0,9),xlim=c(0,50),col=cores1,main > n,font.main = 1, cex.main = 1.1,las=1, axisnames = FALSE, width > 0.8,cex.names=1.0,horiz = TRUE) > text(y = djf.bar, x = djf.gcms[,n], label = round(djf.gcms[,n], > digits=0), pos = 4, cex = 1.0) > > } > > c = 9 > for (m in c) { > djf.bar<-barplot(djf.gcms[,m],ylim=c(0,9),xlim=c(0,50),col=cores1,main > m,type="n",font.main = 1, cex.main = 1.1,las=1, axisnames = T, width > 0.8,cex.names=1.5,horiz = TRUE) > abline(v=c(seq(0,50,10)),col='grey',lwd=0.2) > par(new=TRUE) > djf.bar<-barplot(djf.gcms[,m],ylim=c(0,9),xlim=c(0,50),col=cores1,main > m,font.main = 1, cex.main = 1.1,las=1, axisnames = T, width > 0.8,cex.names=1.5,horiz = TRUE) > title("Frequency (%)", line = -17.0) > text(y = djf.bar, x = djf.gcms[,m], label = round(djf.gcms[,m], > digits=0), pos = 4, cex = 1.2) > > } > > for (i in 10:12) { > djf.bar<-barplot(djf.gcms[,i],ylim=c(0,9),xlim=c(0,50),col=cores1,main > i,type="n",font.main = 1, cex.main = 1.1,las=1, axisnames = F, width > 0.8,cex.names=1.0,horiz = TRUE) > abline(v=c(seq(0,50,10)),col='grey',lwd=0.2) > par(new=TRUE) > djf.bar<-barplot(djf.gcms[,i],ylim=c(0,9),xlim=c(0,50),col=cores1,main > i,font.main = 1, cex.main = 1.1,las=1, axisnames = F, width > 0.8,cex.names=1.0,horiz = TRUE) #xlab="Frequency (%)" > title("Frequency (%)", line = -17.0) > text(y = djf.bar, x = djf.gcms[,i], label = round(djf.gcms[,i], > digits=0), pos = 4, cex = 1.0) > > } > dev.off() > > > > ------------ > Try not to become a man of success but rather a man of value- Albert > Einstein > > Kwesi A. Quagraine > Department of Physics > School of Physical Sciences > College of Agriculture and Natural Sciences > University of Cape Coast > Cape Coast, Ghana > > Alt. Email: kwesi at csag.uct.ac.za > Web: http://www.recycleupghana.org/ > Office: +27 21 650 3164 > Skype: quagraine_cwasi > ______________________________________________ > 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.
Kwesi A. Quagraine
2019-May-28 20:47 UTC
[R] URGENT help-Problem with panel barplot spacing
Thanks for the code, Rich. I now get the concept of using the lattice library. Most grateful for the references shared. Regards Kwesi On 28 May 2019 at 19:56:06, Richard M. Heiberger (rmh at temple.edu) wrote: I think this is what you want. You didn't send a reproducible example (no values for djf.gcms or for cores1). For what I think you are doing, lattice would be much simpler. It handles the repetition within each panel for you. ## generate some data djf.gcms <- matrix(sample(50, size=9*12, replace=TRUE), 9, 12) library(lattice) library(latticeExtra) djfs <- cbind(stack(data.frame(djf.gcms)), letter=factor(letters[1:9])) head(djfs) tmp <- barchart(letter ~ values | ind, group=letter, col=1:9, data=djfs, horizontal=TRUE, stack=TRUE, type="i", scales=list(x=list(alternating=FALSE, axs="i", limits=c(0,59))), origin=0, layout=c(4, 3), between=list(x=1, y=2)) + layer(panel.text(x=x+5, y, label=x)) + layer(panel.abline(v=seq(0,50,10), col="gray"), under=TRUE) tmp Rich The best place to start learning lattice is the trellis book http://geog.uoregon.edu/GeogR/pdfs/trellis.user.pdf The definitive reference is Deepayan Sarkar's book, Lattice: Multivariate Data Visualization with R https://www.e-reading.club/bookreader.php/137342/Lattice._Multivariate_Data_Visualization_with_R.pdf My book (HH2) is Heiberger, Richard M. and Holland, Burt (2015). Statistical Analysis and Data Display: An Intermediate Course with Examples in R. Springer, second edition. ISBN 978-1-4939- 2121-8. https://www.springer.com/us/book/9781493921218 See HH2 Chapter 4 Graphs for a general discussion and many examples throughout the book and in the accompanying CRAN package HH. install.packages("HH") On Tue, May 28, 2019 at 6:42 AM Kwesi A. Quagraine <starskykwesi at gmail.com> wrote:> > Hello All, > > I am struggling to control the spaces between barplots I have panelled. I > would be grateful for any help in reducing the spaces between the plots. > For instance, how I can reduce distance between 1 and 2, 2 and 3 etc. > > I would appreciate any help on this. > > Thanks > > Here?s a snippet of my code and attached is the current image I generate > from the command; > > ##for djf >postscript("fig_paper2_fre_obs_models_djf_1980_2013_4x3_new.eps",width=10,height=8,paper="special",horizontal=T,onefile=T)> > par(mfrow=c(3,4)) > par(mar=c(6,11,1,2)) > > a =1 > for (j in a) { > djf.bar<- barplot(djf.gcms[,j],ylim=c(0,9),xlim=c(0,50),col=cores1,main > j,type="n",font.main = 1, cex.main = 1.5,las=1, axisnames = T, width > 0.8,cex.names=1.5,horiz = TRUE) > abline(v=c(seq(0,50,10)),col='grey',lwd=0.2) > par(new=TRUE) > djf.bar<-barplot(djf.gcms[,j],ylim=c(0,9),xlim=c(0,50),col=cores1,main > j,font.main = 1, cex.main = 1.5,las=1, axisnames = T, width > 0.8,cex.names=1.5,horiz = TRUE) > ## Add text at top of bars > text(y = djf.bar, x = djf.gcms[,j], label = round(djf.gcms[,j], > digits=0), pos = 4, cex = 1.2) > } > > > for (i in 2:4) { > djf.bar<-barplot(djf.gcms[,i],ylim=c(0,9),xlim=c(0,50),col=cores1,main > i, yaxs="i",type="n",font.main = 1, cex.main = 1.1,las=1, axisnames > FALSE, width = 0.8,cex.names=1.0,horiz = TRUE) > abline(v=c(seq(0,50,10)),col='grey',lwd=0.2) > par(new=TRUE) > djf.bar<-barplot(djf.gcms[,i],ylim=c(0,9),xlim=c(0,50),col=cores1,main > i, yaxs="i",font.main = 1, cex.main = 1.1,las=1, axisnames = FALSE, width > 0.8,cex.names=1.0,horiz = TRUE) > text(y = djf.bar, x = djf.gcms[,i], label = round(djf.gcms[,i], > digits=0), pos = 4, cex = 1.0) > > } > > b=5 > for (k in b) { > djf.bar<-barplot(djf.gcms[,k],ylim=c(0,9),xlim=c(0,50),col=cores1,main > k,type="n",font.main = 1, cex.main = 1.1,las=1, axisnames = T, width > 0.8,cex.names=1.5,horiz = TRUE) > abline(v=c(seq(0,50,10)),col='grey',lwd=0.2) > par(new=TRUE) > djf.bar<-barplot(djf.gcms[,k],ylim=c(0,9),xlim=c(0,50),col=cores1,main > k,font.main = 1, cex.main = 1.1,las=1, axisnames = T, width > 0.8,cex.names=1.5,horiz = TRUE) > text(y = djf.bar, x = djf.gcms[,k], label = round(djf.gcms[,k], > digits=0), pos = 4, cex = 1.2) > > } > > for (n in 6:8) { > barplot(djf.gcms[,n],ylim=c(0,9),xlim=c(0,50),col=cores1,main > n,type="n",font.main = 1, cex.main = 1.1,las=1, axisnames = FALSE, width > 0.8,cex.names=1.0,horiz = TRUE) > abline(v=c(seq(0,50,10)),col='grey',lwd=0.2) > par(new=TRUE) > barplot(djf.gcms[,n],ylim=c(0,9),xlim=c(0,50),col=cores1,main > n,font.main = 1, cex.main = 1.1,las=1, axisnames = FALSE, width > 0.8,cex.names=1.0,horiz = TRUE) > text(y = djf.bar, x = djf.gcms[,n], label = round(djf.gcms[,n], > digits=0), pos = 4, cex = 1.0) > > } > > c = 9 > for (m in c) { > djf.bar<-barplot(djf.gcms[,m],ylim=c(0,9),xlim=c(0,50),col=cores1,main > m,type="n",font.main = 1, cex.main = 1.1,las=1, axisnames = T, width > 0.8,cex.names=1.5,horiz = TRUE) > abline(v=c(seq(0,50,10)),col='grey',lwd=0.2) > par(new=TRUE) > djf.bar<-barplot(djf.gcms[,m],ylim=c(0,9),xlim=c(0,50),col=cores1,main > m,font.main = 1, cex.main = 1.1,las=1, axisnames = T, width > 0.8,cex.names=1.5,horiz = TRUE) > title("Frequency (%)", line = -17.0) > text(y = djf.bar, x = djf.gcms[,m], label = round(djf.gcms[,m], > digits=0), pos = 4, cex = 1.2) > > } > > for (i in 10:12) { > djf.bar<-barplot(djf.gcms[,i],ylim=c(0,9),xlim=c(0,50),col=cores1,main > i,type="n",font.main = 1, cex.main = 1.1,las=1, axisnames = F, width > 0.8,cex.names=1.0,horiz = TRUE) > abline(v=c(seq(0,50,10)),col='grey',lwd=0.2) > par(new=TRUE) > djf.bar<-barplot(djf.gcms[,i],ylim=c(0,9),xlim=c(0,50),col=cores1,main > i,font.main = 1, cex.main = 1.1,las=1, axisnames = F, width > 0.8,cex.names=1.0,horiz = TRUE) #xlab="Frequency (%)" > title("Frequency (%)", line = -17.0) > text(y = djf.bar, x = djf.gcms[,i], label = round(djf.gcms[,i], > digits=0), pos = 4, cex = 1.0) > > } > dev.off() > > > > ------------ > Try not to become a man of success but rather a man of value- Albert > Einstein > > Kwesi A. Quagraine > Department of Physics > School of Physical Sciences > College of Agriculture and Natural Sciences > University of Cape Coast > Cape Coast, Ghana > > Alt. Email: kwesi at csag.uct.ac.za > Web: http://www.recycleupghana.org/ > Office: +27 21 650 3164 > Skype: quagraine_cwasi > ______________________________________________ > 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 guidehttp://www.R-project.org/posting-guide.html> and provide commented, minimal, self-contained, reproducible code.------------ Try not to become a man of success but rather a man of value- Albert Einstein Kwesi A. Quagraine Department of Physics School of Physical Sciences College of Agriculture and Natural Sciences University of Cape Coast Cape Coast, Ghana Alt. Email: kwesi at csag.uct.ac.za Web: http://www.recycleupghana.org/ Office: +27 21 650 3164 Skype: quagraine_cwasi [[alternative HTML version deleted]]