我一直在使用我在R help listserv上找到的image.plot(字段包)的修改版本来绘制图例。 https://stat.ethz.ch/pipermail/r-help/2008-June/164700.html
library(fields)
imp <- `body<-`(image.plot,value=`[[<-`(body(image.plot),28,
quote({par(big.par)
par(plt = big.par$plt, xpd = TRUE)
par(mfg = mfg.save, new = FALSE)
invisible()})))
以下是一个示例数据集
m <- matrix(1:15,ncol=3)
par(mar=c(5,5,5,3))
imp(m,axes=FALSE)
box()
axis(1,axTicks(1),lab=letters[1:length(axTicks(1))])
但是,我想在图例中添加标题(最好垂直对齐)以指定单位。我不知道身体的哪个位置(image.plot)我可以进行这个修改或者当我调用imp时如何指定它。当我尝试创建一个更大的布局来放置image.plot时,我收到的错误是图形对于布局边距来说太大了。
任何帮助都将不胜感激。
我已修改了我的代码,以便我可以使用单独的命令绘制一个(3,2)面板,只是沿着底部水平绘制图例。但是,我想有两个传说,每一个情节下都有一个传说,但传说只在右下方绘制。我知道我在绘制(3,2)面板之前在我设置的空白区域中绘制了图例。
par( oma=c(8,2,1,1))
set.panel(3,2)
但我想知道如何在我为传奇制作的空间中移动。指定side似乎不起作用,也不更改oma值。
par( oma=c(2,0,2,0))
image.plot(x,y,z, legend.only=TRUE, horizontal=TRUE, legend.mar=5,
legend.shrink = 0.8)
mtext(line=1, side=1, "cms", outer=F)
答案 0 :(得分:0)
看起来fields
使用基本图形。因此,您可以使用mtext
在初始绘图后的任何位置添加文本。我通过?fields
来解决这个问题,其中我发现help( fields.hints)
有很好的例子。
答案 1 :(得分:0)
我走到马的嘴边,从Image.Plot的制造商那里回来。很简单的回应!下面提供了生成数据的3乘2图,两列中的每一列都有一个图例。
library( fields)
# Generating the data
x<- 1: 10
y<- 1:15
obj1<-list( x=x,y=y, z= outer(x,y,"+"))
zlim1<- range( obj1$z)
obj2<-list( x=x,y=y, z= outer(x^2,y,"+")*100)
zlim2<- range( obj2$z)
set.panel( 3,2)
par(oma=c(8,2,1,1)) #ADDS EXTRA SPACE AT BOTTOM OF FIGURE TO PUT LEGENDS
par( mar=c(4,4,1,1))
ctab<- tim.colors(25)
image( obj1, zlim=zlim1, col=ctab)
image( obj2, zlim=zlim2, col=ctab)
image( obj1, zlim=zlim1, col=ctab)
image( obj2, zlim=zlim2, col=ctab)
image( obj1, zlim=zlim1, col=ctab)
image( obj2, zlim=zlim2, col=ctab)
par(oma=c(4,1,2,0))
# move back to the 5 th plot ( position = 3,1)
# First Legend under column 1
par( mfg=c(3,1))
image.plot( legend.only=TRUE, horizontal = TRUE, col=ctab, zlim =zlim1)
# Second legend under Column 2
par( mfg=c(3,2))
image.plot( legend.only=TRUE, horizontal =TRUE, col=ctab, zlim =zlim2)
Blammo。