2013-10-13 35 views
0

我一直使用在R幫助列表中找到的image.plot(字段包)的修改版本來繪製圖例。 https://stat.ethz.ch/pipermail/r-help/2008-June/164700.html在image.plot,庫(字段)中添加圖例的標題

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) 

但我想知道如何在這個空間中移動,我爲傳奇製作。指定方似乎不起作用,也不改變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

看起來像fields使用基礎圖形。因此,您可以在使用mtext進行初始繪圖之後的任何地方添加文本。我想通過做?fields,其中我發現help(fields.hints)有很好的例子。

+0

這是一個好的開始。我組織了我的圖(3,2),我需要兩個圖表中的每一個的2個圖例。我似乎只能在我的右下角繪製一個水平圖例,但是會在左下角看到一個類似的圖例(略有不同的比例)。有關如何修改此位置的任何建議?我已經包含了上面的代碼。 – user2850039

+0

我認爲你需要完全手動完成你的傳奇,使用'legend',並在''legends'處加入細節。這種事情是使用基本圖形的痛苦,但你堅持使用基礎圖形。也許[這](http://stackoverflow.com/questions/3932038/plot-a-legend-outside-of-the-plotting-area-in-base-graphics)所以這個問題將是有益的,這[頁] (http://research.stowers-institute.org/efg/R/Graphics/Basics/mar-oma/)也可能。 –

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。