在image.plot,库(字段)中为图例添加标题

时间:2013-10-13 13:38:34

标签: r plot legend

我一直在使用我在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)

2 个答案:

答案 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。