Dear Mailing list,
I want to plot a matrix using image() and on its side I want to give
information to every line of the matrix using colors. I tried to use
barplot, but cannot align the two plots. Code below. I succeed in doing
what I want using another image() plot, but was wondering whether there is
an easier way to do it.
Thank you so much!
Tiago
############# code
## matrix to plot
matI <- matrix(c(rep(1:3, 100), rep(4:6, 100), rep(7:9, 100)), nrow=3,
byrow=T)
## plot with three panels
layout(matrix(1:3, nrow=1), widths=c(1,1,1))
# margins
mar1 <- c(1,1,1,1)
par(mar=mar1)
## plot matrix
image(x=(1:(ncol(matI)+1)), y=(1:(nrow(matI)+1)), t(matI), axes=F)
abline(h=c(1,100,200,300), xpd=NA)
## manually adjusting bottom and up par it lines up
## mar1 <- c(1.9,0,1.9,2)
## par(mar=mar1)
colorsBarPlot <- c(rep('green', 100), rep('blue', 100),
rep('black', 100))
barplot(rep(1, 300), space=0, border=NA, col=colorsBarPlot, horiz=T, axes=F)
# it works but seems to cumbersome
codeCol <- as.numeric(as.factor(colorsBarPlot))
colsImage <- unique(colorsBarPlot)
colsBreaks <- sort(unique(c(codeCol-0.5, codeCol+0.5)))
image(matrix(codeCol, nrow=1), col=rev(colsImage), breaks=colsBreaks,
axes=F)
######### end of code
[[alternative HTML version deleted]]
Insert par(yaxs="i") after you are finsihed with the image. See ?par for details what is does. Uwe Ligges On 17.07.2012 13:13, Tiago R M wrote:> Dear Mailing list, > > I want to plot a matrix using image() and on its side I want to give > information to every line of the matrix using colors. I tried to use > barplot, but cannot align the two plots. Code below. I succeed in doing > what I want using another image() plot, but was wondering whether there is > an easier way to do it. > > Thank you so much! > > Tiago > > ############# code > > ## matrix to plot > matI <- matrix(c(rep(1:3, 100), rep(4:6, 100), rep(7:9, 100)), nrow=3, > byrow=T) > > ## plot with three panels > layout(matrix(1:3, nrow=1), widths=c(1,1,1)) > > # margins > mar1 <- c(1,1,1,1) > par(mar=mar1) > > ## plot matrix > image(x=(1:(ncol(matI)+1)), y=(1:(nrow(matI)+1)), t(matI), axes=F) > abline(h=c(1,100,200,300), xpd=NA) > > ## manually adjusting bottom and up par it lines up > ## mar1 <- c(1.9,0,1.9,2) > ## par(mar=mar1) > colorsBarPlot <- c(rep('green', 100), rep('blue', 100), rep('black', 100)) > barplot(rep(1, 300), space=0, border=NA, col=colorsBarPlot, horiz=T, axes=F) > > # it works but seems to cumbersome > codeCol <- as.numeric(as.factor(colorsBarPlot)) > colsImage <- unique(colorsBarPlot) > colsBreaks <- sort(unique(c(codeCol-0.5, codeCol+0.5))) > image(matrix(codeCol, nrow=1), col=rev(colsImage), breaks=colsBreaks, > axes=F) > > ######### end of code > > [[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. >
Dear Uwe, Dear List, This is exactly it. I knew there had to be an easier way. And I had even looked up in par for it! Knowledge is a beautiful thing; thank you so much.> On Tue, Jul 17, 2012 at 4:28 PM, Uwe Ligges > <ligges at statistik.tu-dortmund.de> wrote: > > Insert > > par(yaxs="i") > > after you are finsihed with the image. > See ?par for details what is does. > > Uwe Ligges>> On 17.07.2012 13:13, Tiago R M wrote:>>> >>> Dear Mailing list, >>> >>> I want to plot a matrix using image() and on its side I want to give >>> information to every line of the matrix using colors. I tried to use >>> barplot, but cannot align the two plots. Code below. I succeed in doing >>> what I want using another image() plot, but was wondering whether there >>> is >>> an easier way to do it. >>> >>> Thank you so much! >>> >>> Tiago >>> >>> ############# code >>> >>> ## matrix to plot >>> matI <- matrix(c(rep(1:3, 100), rep(4:6, 100), rep(7:9, 100)), nrow=3, >>> byrow=T) >>> >>> ## plot with three panels >>> layout(matrix(1:3, nrow=1), widths=c(1,1,1)) >>> >>> # margins >>> mar1 <- c(1,1,1,1) >>> par(mar=mar1) >>> >>> ## plot matrix >>> image(x=(1:(ncol(matI)+1)), y=(1:(nrow(matI)+1)), t(matI), axes=F) >>> abline(h=c(1,100,200,300), xpd=NA) >>> >>> ## manually adjusting bottom and up par it lines up >>> ## mar1 <- c(1.9,0,1.9,2) >>> ## par(mar=mar1) >>> colorsBarPlot <- c(rep('green', 100), rep('blue', 100), rep('black', >>> 100)) >>> barplot(rep(1, 300), space=0, border=NA, col=colorsBarPlot, horiz=T, >>> axes=F) >>> >>> # it works but seems to cumbersome >>> codeCol <- as.numeric(as.factor(colorsBarPlot)) >>> colsImage <- unique(colorsBarPlot) >>> colsBreaks <- sort(unique(c(codeCol-0.5, codeCol+0.5))) >>> image(matrix(codeCol, nrow=1), col=rev(colsImage), breaks=colsBreaks, >>> axes=F) >>> >>> ######### end of code >>> >>> [[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.