2013-12-19 44 views
0

我似乎無法找到關於此的很多信息。我想旋轉主圖和圖像,同時保留圖例和標題不變。用於在R中旋轉/傾斜圖像圖的grid.cap()的替代方法

下面是一個例子。你需要fields包,它給你image.plot功能。

x=1:10 
y=1:10 
z=matrix(-50:49,10,10) 
image.plot(x,y,z, main="Some Fancy Title",yaxt="n",xaxt="n", ylab="", xlab="") 

所以,我只是想旋轉主圖像,並留下標題和圖例。順便說一句,我旋轉36度,所以我不能只是旋轉矩陣我喂image.plotgrid包似乎引導我朝着正確的方向發展,但令人沮喪的是,我無法直接將它們繪製成viewports,並且有陰謀或base中的任何其他內容。我必須說不是迄今爲止的grid軟件包的粉絲。

我發現this post它提供了答案5.一些有用的信息,我從這個知道,我應該能夠使用grid.cap()捕捉到我的設備的光柵和使用grid.raster(cap, vp=viewport(angle=36))的情節導入到正確的視口。我在使用這種方法爲我工作時遇到問題,啓動時效率很低。我將繪製成千上萬的圖像來創建我所建模的各種時間和空間變化數據的gif。

我正在尋找的是一種讓grid.cap()與上面的例子一起工作的方法,並且只旋轉圖像的主要部分36度,或者做一個替代方案,它可以很好地處理我的圖塊。非常感謝任何給出這個想法的人。

回答

1

問題是image.plot不是一個情節,而是兩個:主要的和傳說。如果你想使用包fields'image.plot函數,你必須直接擺弄函數的代碼。否則,您可以使用基本包graphics中的功能image,並手動添加您的圖例和標題。

下面是做這件事:

library(grid) 
x=1:10 
y=1:10 
z=matrix(-50:49,10,10) 

layout(matrix(c(1,2),ncol=2), widths=c(2,1))   
par(mar=c(5,3,5,3)) 
image(x,y,z,yaxt="n",xaxt="n", ylab="", xlab="",col=heat.colors(50)) 
cap <- grid.cap() 
grid.newpage() 
grid.raster(cap, x=unit(0.6,'npc'), #You can modify that if the plot 
      y=unit(0.5,'npc'),  #ends up outside the figure area 
      vp=viewport(angle=36)) 
mtext("Some fancy title",side=3,cex=1.5,line=2) #Plot your title 
par(mar=c(5,8,5,3)) 
plot(NA,ax=F,ann=F,type="n",xlim=c(0,1),ylim=c(0,50),yaxs="i") 
for(i in 1:50)rect(0,i-1,1,i,col=heat.colors(50)[i],border=NA) 
box() 
axis(4,las=2,at=seq(0,50,by=10),labels=seq(-50,50,by=20)) 

enter image description here

+1

感謝這一點,但我不能讓你的輸出。在調用'grid.raster(cap,...'後我的代碼在使用UseMethod(「as.raster」)時出現錯誤: 'as.raster'沒有適用的方法應用於類「NULL 「'''''''''''''''''''''''''''''''''''''''''''''''''''''我有一個很新的R安裝,已經在另一臺機器上試過了,在x11()上繪圖不會產生錯誤,只會畫出圖例和標題。是不是在爲我工作?試着從我提到的帖子的例子也產生這個錯誤 – CCurtis

+0

也可能你不知道,但與'圖形情節'你可以設置'legend.only = TRUE',它只會繪製圖例它通常出現,但是你仍然需要單獨添加標題 – CCurtis

+0

我沒有讓任何東西出來,鏈接的帖子的例子爲我工作,所以我現在不知道該說什麼,我會嘗試調查什麼可以導致你的錯誤。如果你看看函數,請參考'image.plot' n代碼你會發現它不僅創建了兩個plot,而且還在最後重新初始化了繪圖區域,所以我認爲不用修改該函數的代碼就可以用這些'grid'函數來獲取繪圖。 – plannapus