2014-11-03 3 views
2

Я хочу объединить 4 фигуры в одном и том же участке. Каждый barplot связан с участком image. Я хочу, чтобы ширина полосы была точно такой же ширины, как ширина сетки на участке image. Верхняя панель и левая панель.Точный контроль ширины штанги в штриховом шкафу

Я наклеил свой код для подражания. Как я могу изменить для этой цели? Или я могу использовать ggplot2 для этого?

datMat <- matrix(rep(1, 100), nrow=10) 
op=par(oma=c(1, 1, 1, 1), mar=c(1, 1, 1, 1), lwd=0.2, cex=.5) 

nf <- layout(matrix(c(0, 1, 0, 2, 3, 4), 2, 3, byrow=TRUE), widths=c(1, 6, 1), 
      heights=c(1, 3), respect=TRUE) 

par(mar=c(3, 0.5, 3, 0), mgp=c(0, 1, -2.2)) 
barplot(seq(1, 10), width=1, xlim=c(0, ncol(datMat)), xlab="", space=0, 
     col="blue", border="white") 

box("inner", lty="dotted", col="green") 
box("outer", lty="solid", col="green") 

par(mar=c(0, 0, 0, 0), mgp=c(0, 1, -1)) 
barplot(-seq(1, 10), ylim=c(0, nrow(datMat)), width=1.025, horiz=TRUE, ,axes 
     =T, space=0, col="blue", border="white") 

par(mar=c(1, 0, 0, 0)) 
x.len <- ncol(datMat) 
y.len <- nrow(datMat) 
single.col <- 'chartreuse4' 
double.col <- 'blue4' 
triple.col <- '#FFFF33' 
four.col <- '#FF7F00' 
five.col <- '#E41A1C' 
colors <- c('grey90', single.col, double.col, triple.col, four.col, five.col) 

image(x=1:x.len, y=1:y.len, z=t(datMat), col=colors, 
     breaks=c(-0.5, 0.5 , 1.5 , 2.5 , 3.5 , 4.5 , 5.5), axes=FALSE, ann=F) 
abline(h=seq(0.5, 0.5+y.len), col='white', lwd=0.5); 
abline(v=seq(0.5, 0.5+x.len), col='white', lwd=0.5) 

par(mar=c(0, 0, 0, 0), mgp=c(0, 1, 0)) 
barplot(seq(1, 10), ylim=c(0, nrow(datMat)), width=.5, horiz=TRUE, axes=FALSE, 
     space=0, col="blue", border ="white") 
axis(side=1) 


sessionInfo()  
# R version 3.1.1 (2014-07-10) 
# Platform: x86_64-apple-darwin13.1.0 (64-bit) 
# 
# locale: 
# [1] C/UTF-8/C/C/C/C 
# 
# attached base packages: 
# [1] datasets utils  stats  graphics grDevices methods base 
# 
# other attached packages: 
# [1] xlsx_0.5.7     xlsxjars_0.6.1 
# [3] rJava_0.9-6     nutshell_2.0 
# [5] nutshell.audioscrobbler_1.0 nutshell.bbdb_1.0 
# [7] faraway_1.0.6    MASS_7.3-35 
# 
# loaded via a namespace (and not attached): 
# [1] tools_3.1.1 

ответ

1

Если вы не укажете xlim и ylim, участки заполнит свободное пространство. Тогда это просто вопрос предоставления xaxs='i' для верхнего участка и yaxs='i' для левого и правого участков.

par(oma=c(1, 1, 1, 1), mar=c(1, 1, 1, 1), lwd=0.2, cex=0.5) 

nf <- layout(matrix(c(0, 2, 0, 3, 1, 4), 2, 3, byrow=TRUE), 
      widths=c(1, 6, 1), heights=c(1, 3), respect=TRUE) 

par(mar=rep(0, 4)) 
m <- matrix(runif(100), ncol=10) 
image(x=seq_len(ncol(m)), y=seq_len(nrow(m)), z=t(m), axes=FALSE, ann=F) 
abline(h=seq(0.5, 0.5 + nrow(m)), v=seq(0.5, 0.5 + ncol(m)), col="white") 

par(mar=c(1, 0, 0, 0)) 
barplot(seq(1, 10), xlab="", space=0, border="white", xaxs='i') 
par(mar=c(0, 0, 0, 1)) 
barplot(-seq(1, 10), horiz=TRUE, space=0, border="white", yaxs='i', xaxt='n') 
axis(1, at=axTicks(1), labels=-axTicks(1)) # correct x-axis tick labels for left plot 
par(mar=c(0, 1, 0, 0)) 
barplot(seq(1, 10), horiz=TRUE, axes=F, space=0, border="white", yaxs='i') 
axis(1) 

enter image description here

+0

jbaums, Большое спасибо. Вы ответственно ответили на мой вопрос. Это очень помогает мне. Не могли бы вы поделитесь мной немного больше трюков, как я могу изменить xlab в левом столбце на положительный? Я хочу изменить -10, -6, -2 до 10, 6, 2. Большое спасибо заблаговременно. – Peter

+0

@Peter - см. Мое редактирование выше – jbaums

+0

Большое спасибо. Отлично. – Peter

Смежные вопросы