2012-09-13 21 views
3

我想將兩個圖塊下的常見圖例居中。我已使用xpd=TRUE來允許在繪圖本身之外進行打印,並使用oma爲圖例創建空間。然而,這個傳說不會在水平方向上移動,並且會在垂直方向「提早」剪輯。有什麼建議?r中的兩個圖塊下方的居中圖例

quartz(title="PCoA",12,6) 
par(mfrow=c(1,2),oma=c(5,0,0,0),xpd=TRUE) 

plot(1:3,4:6,main="plot 1") 

plot(1:3,4:6,main="plot 2") 


# Clips the plot  
legend(1,3.5,ncol=3,c("0-1 km","1-5 km","outside barrier"),fill=c("green","orange","red"), title="Fetch") 

# Won't let me move the legend sideways 
legend(0,3.5,ncol=3,c("0-1 km","1-5 km","outside barrier"),fill=c("green","orange","red"), title="Fetch") 

enter image description here

UPDATE

與它下面切斷成爲由通過拖動邊緣改變圖形的尺寸可見的曲線圖的邊緣的溶液(見下文)。任何想法可能會發生什麼?

enter image description here

enter image description here

回答

10

而不是使用par=mfrow(...),我建議你使用layout()

這使您可以與標繪位置指定矩陣:

layout(matrix(c(1,2,3,3), ncol=2, byrow=TRUE), heights=c(4, 1)) 

par(mai=rep(0.5, 4)) 
plot(1:3,4:6,main="plot 1") 
plot(1:3,4:6,main="plot 2") 

par(mai=c(0,0,0,0)) 
plot.new() 
legend(x="center", ncol=3,legend=c("0-1 km","1-5 km","outside barrier"), 
     fill=c("green","orange","red"), title="Fetch") 

enter image description here

+1

再次感謝您的回答。我似乎遇到了這個解決方案的麻煩,因爲它切斷了圖形的邊緣(參見更新右側的圖右側)。如果我「擠壓」圖表,點就會變得可見。我正在使用與上面所示相同的設置。任何想法可能會發生什麼? – Elizabeth

+0

我認爲你已經看過'lattice'或'ggplot'來實現與facet相同的效果?這就是我要做的,而不是用手工放置傳說。 – Andrie

+0

嗯..沒有我只是使用layout()如上建議。我應該放棄上面的方法並使用格嗎? – Elizabeth

5

par(xpd=NA)更是你在找什麼。從?par幫助頁面中提取出來:

xpd
邏輯值或NA。如果爲FALSE,則所有繪圖都將裁剪到繪圖區域,如果爲TRUE,則所有繪圖都將裁剪至繪圖區域,如果爲NA,則將所有繪圖裁剪至設備區域。另見clip

事實上,你希望它被夾在設備區域,而不是圖形區(見,例如,this blog entry的情節,這個數字與元件區域間的差異的圖形解釋)。

quartz(title="PCoA",12,6) 
par(mfrow=c(1,2),oma=c(5,0,0,0),xpd=NA) 

plot(1:3,4:6,main="plot 1") 

plot(1:3,4:6,main="plot 2") 
legend(-0.5,3.5,ncol=3,c("0-1 km","1-5 km","outside barrier"), 
    fill=c("green","orange","red"), title="Fetch") 

enter image description here

+0

謝謝。總是很高興看到替代方式去做事情。 – Elizabeth

+1

如果您打算使用這種方法,那麼您還應該學習'grconvertX'和'grconvertY'函數來查找放置圖例的座標。 –