2010-08-20 85 views
6

我試圖在filled.contour圖中繪製一個盒子,但不幸的是,當我在fill.contour繪圖創建後繪製線條()時,圖形會向右移動,因爲縮放將圖像強制爲左邊,但框保持在相同的座標。下面是我的代碼如下所示:在R中的filled.contour圖中繪製一個框?

dev.new(width=6,height=7) 
mypredict<-matrix(data=mypredict,nrow=20,ncol=25) 
filled.contour(x=seq(from=-1.5,to=1.5,length=20), 
y=seq(from=1,to=3.75,length=25), 
z=mypredict, 
col=hsv(h=seq(from=2/3,to=0,length=20),s=1,v=1) 
) 
top <- 3.42 
bot <- 1.56 
lines(c(-1,-1),c(bot,top)) 
lines(c(1,1),c(bot,top)) 
lines(c(-1,1),c(top,top)) 
lines(c(-1,1),c(bot,bot)) 

有誰知道我可以繪製filled.contour函數內的線路?否則,由於圖形的比例/圖例位於右側,因此線條無法正確繪製到主圖像上。

謝謝!

回答

6

的手冊頁filled.contour解釋該問題(並給出了溶液)

此功能目前使用的「佈局」功能等被限制 到一整頁顯示。作爲另一種選擇,可以考慮在'多邊形'顯示中使用'lattice'包中的'等級圖' 和'contourplot'函數。

'filled.contour'產生的輸出實際上是兩個地塊的組合 ;一個是填充輪廓,一個是圖例。 爲這兩個圖設置了兩個單獨的座標系, 但它們只用於內部 - 一旦函數返回 這些座標系會丟失。如果您想註解 主要輪廓圖,例如添加點,,您可以在'plot.axes'參數中指定 圖形命令。一個例子是 下面給出。

所以基本上,你通過一些指令作爲plot.axes參數來覆蓋標準行爲。

在您的例子:

filled.contour(x = seq(from=-1.5,to=1.5,length=20), 
     y = seq(from=1,to=3.75,length=25), z = mypredict, 
     col = hsv(h=seq(from=2/3,to=0,length=20),s=1,v=1), 
     plot.axes = {axis(1); axis(2); rect(left, bottom, right, top);}) 

請注意,您必須重新創建兩軸,否則他們將不會被繪製。此外,當有rect函數時,無需使用lines語句! :)

希望這可以幫助

+0

謝謝!這是一個巨大的幫助! rect功能也是一個很好的提示! – 2010-08-20 09:05:54