THanks a lot, Thomas - I am 100% clear on the legend symbol now, very helpful.
With legend colors - I just tried to have more colors in all.colors than there are variables to plot on the graph. Did it on purpose - so that there are always more colors to pick from. But if I do names(my.data) - then I also get a symbol in the legend for something that is not on the graph (e.g., data). Dimitri On Tue, Oct 5, 2010 at 10:52 AM, Thomas Stewart <tgstew...@gmail.com> wrote: > Dimitri- > Regarding question 1, it is the pch argument that controls the legend > symbol. In my configuration, pch=15 gives a colored, filled-in box. To see > the possible pch symbols, run the following code: > plot(0,0,xlim=c(0,9), ylim=c(0,9),type="n", axes=F,xlab="",ylab="") > for(i in 0:9){ > for(j in 0:9){ > points(j,9-i,pch=10*i+j,cex=2) > } > } > axis(3,at=0:9) > axis(2,at=0:9,label=9:0) > Then pick the number that corresponds to the filled-in box. > Regarding question 2, it appears (I haven't gone line by line through your > code.) that each color in the vector all.colors corresponds to a column in > my.data. If that is the case, then let the legend code be: > legend(par()$usr[2], > mean(par()$usr[3:4]), > names(my.data), > xpd=T, > bty="n", > pch=15, > col=all.colors) > Hope that helps. > -tgs > > On Tue, Oct 5, 2010 at 10:33 AM, Dimitri Liakhovitski > <dimitri.liakhovit...@gmail.com> wrote: >> >> Thanks a lot, Thomas. >> May I ask 2 questions: >> >> 1. Is there a way to "fill" the legend rectangles with color >> (currently, they just contain a colored cross)? >> 2. Currently, my graph grabs the colors automatically (as I loop >> through var, it grabs col=all.colors[which(names(my.data) %in% var)]. >> I am wondering if it's possible to do the same for the legend? Because >> I just want the legend to have the same colors as in the graph... (in >> real life I'll have a lot of colors and it'll be hard to enter them >> all manually). >> >> Thanks a lot! >> Dimitri >> >> >> >> On Tue, Oct 5, 2010 at 12:31 AM, Thomas Stewart <tgstew...@gmail.com> >> wrote: >> > Right before the plot statement add: >> > par(mar=c(5,4,4,6),xpd=F) >> > then at the end add >> > legend(par()$usr[2], >> > mean(par()$usr[3:4]), >> > c("Blue","Yellow","Green","Orange"), >> > xpd=T, >> > bty="n", >> > pch=15, >> > col=c("Blue","Yellow","Green","Orange")) >> > >> > On Mon, Oct 4, 2010 at 5:16 PM, Dimitri Liakhovitski >> > <dimitri.liakhovit...@gmail.com> wrote: >> >> >> >> Hello! >> >> >> >> My code below creates a data frame and a plot for it. >> >> However, I can't figure out how to add a legend that is not ON the >> >> plot itself, but outside of it (e.g., to the right of my graph or >> >> below it). I tried something: I put a line par(xpd=T, >> >> mar=par()$mar+c(0,0,0,4)) right before my plot command), but that >> >> screwed up all my gridlines - they covered all graph and do not >> >> coincide with tickmarks anymore. >> >> Any help would be greatly appreciated! >> >> Dimitri >> >> >> >> >> >> >> >> >> >> >> >> my.data<-data.frame(date=c(20080301,20080401,20080501,20080601,20080701,20080801,20080901,20081001,20081101,20081201,20090101,20090201,20090301,20090401,20090501,20090601,20090701,20090801,20090901,20091001,20091101,20091201,20100101,20100201,20100301,20100402,20100503), >> >> x=c(1.1, 1, 1.6, 1, 2, 1.5, 2.1, 1.3, 1.9, 1.1, 1, 1.6, 1, 2, 1.5, >> >> 2.1, 1.3, 1.9, 1.1, 1, 1.6, 1, 2, 1.5, 2.1, 1.3, 1.9), >> >> >> >> >> >> y=c(-4,-3,-6,-5,-7,-5.2,-6,-4,-4.9,-4,-3,-6,-5,-7,-5.2,-6,-4,-4.9,-4,-3,-6,-5,-7,-5.2,-6,-4,-4.9), >> >> >> >> >> >> z=c(-0.2,-0.3,-0.4,-0.1,-0.2,-0.05,-0.2,-0.15,-0.06,-0.2,-0.3,-0.4,-0.1,-0.2,-0.05,-0.2,-0.15,-0.06,-0.06,-0.2,-0.3,-0.4,-0.1,-0.2,-0.05,-0.2,-0.15), >> >> >> >> >> >> a=c(10,13,15,15,16,17,15,16,14,10,13,15,15,16,17,15,16,14,10,13,15,15,16,17,15,16,14)) >> >> my.data$date<-as.character(my.data$date) >> >> my.data$date<-as.Date(my.data$date,"%Y%m%d") >> >> (my.data) >> >> str(my.data) >> >> >> >> positives<-which(colSums(my.data[2:ncol(my.data)])>0) # which vars >> >> have positive column sums? >> >> negatives<-which(colSums(my.data[2:ncol(my.data)])<0) # which vars >> >> have negative column sums? >> >> >> >> y.max<-1.1*max(rowSums(my.data[names(positives)])) # the max on the y >> >> axis of the chart >> >> y.min<-1.1*min(rowSums(my.data[names(negatives)])) # the min on the y >> >> axis of the chart >> >> ylim <- c(y.min, y.max) >> >> order.positives<-rev(rank(positives)) >> >> order.of.pos.vars<-names(order.positives) >> >> order.negatives<-rev(rank(negatives)) >> >> order.of.neg.vars<-names(order.negatives) >> >> order<-c(order.negatives,order.positives) >> >> order.of.vars<-names(order) # the order of variables on the chart - >> >> from the bottom up >> >> ### so, the bottom-most area should be for z, the second from the >> >> bottom area- for y (above z) >> >> >> >> all.colors<-c('red','blue','green','orange','yellow','purple') >> >> xx <- c(my.data$date, rev(my.data$date)) >> >> bottom.y.coordinates<-rowSums(my.data[names(negatives)]) >> >> >> >> plot(x=my.data$date, y=bottom.y.coordinates, ylim=ylim, col='white', >> >> type='l', xaxt='n', >> >> ylab='Title for Y', xlab="", main='Chart Title') >> >> >> >> for(var in order.of.neg.vars){ >> >> top.line.coords<-bottom.y.coordinates-my.data[[var]] >> >> bottom.coords<-c(bottom.y.coordinates,rev(top.line.coords)) >> >> polygon(xx,bottom.coords,col=all.colors[which(names(my.data) >> >> %in% >> >> var)]) >> >> bottom.y.coordinates<-top.line.coords >> >> } >> >> >> >> for(var in order.of.pos.vars){ >> >> top.line.coords<-bottom.y.coordinates+my.data[[var]] >> >> bottom.coords<-c(bottom.y.coordinates,rev(top.line.coords)) >> >> polygon(xx,bottom.coords,col=all.colors[which(names(my.data) >> >> %in% >> >> var)]) >> >> bottom.y.coordinates<-top.line.coords >> >> } >> >> >> >> axis(1, labels =format(as.Date(my.data$date, origin="1970-01-01"), >> >> "%Y-%m-%d"), at=my.data$date, las=2,cex.axis=0.7) >> >> grid(nx=(length(my.data$date)-1),ny=NULL,col = "lightgray", lty = >> >> "dotted",lwd = par("lwd")) >> >> >> >> -- >> >> Dimitri Liakhovitski >> >> Ninah Consulting >> >> www.ninah.com >> >> >> >> ______________________________________________ >> >> R-help@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. >> > >> > >> >> >> >> -- >> Dimitri Liakhovitski >> Ninah Consulting >> www.ninah.com > > -- Dimitri Liakhovitski Ninah Consulting www.ninah.com ______________________________________________ R-help@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.