0

我一直在使用我在 R 帮助列表服务器上找到的 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))])

但是,我想在图例中添加一个标题(最好垂直对齐)以指定单位。我不知道在 body(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)
4

2 回答 2

0

看起来像fields使用基本图形。因此,您可以在使用mtext. 我通过做?fieldswhere I found help( fields.hints)which has很好的例子来解决这个问题。

于 2013-10-13T13:42:49.510 回答
0

我走到马的嘴边,听到了 Image.Plot 制造商的回复。非常简单的回应!下面提供了生成数据的 3 x 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)

布拉莫。

于 2013-10-18T02:04:55.217 回答