grid.cap()的替代方案,用于在R中旋转/倾斜图像图

时间:2013-12-19 09:18:52

标签: r image plot rotation

我似乎无法找到关于此的更多信息。我想旋转主要情节和图像,同时保持图例和标题不变。

这是一个例子。您需要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 个答案:

答案 0 :(得分:1)

问题是image.plot不是一个情节而是两个:主要的一个和传说。如果您想使用包fields'image.plot函数,则必须直接使用函数的代码。否则,您可以使用基础包image中的函数graphics并手动添加图例和标题。

这是一种方法:

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