2015-06-23 42 views
0

我有一個繪圖(),其中多個顏色陰影表示相同的東西。我想添加一個傳說,通過使用雙色框(參見下面的示例)來傳達這一點。有沒有辦法使用legend()或類似的命令來做到這一點?或者,是否有辦法確定這些盒子的精確座標,以便我可以在其上繪製一個多邊形()三角形?R:具有多種顏色的圖例框

注意:legend()不會返回每個標籤的外框和左上角的座標,但我不確定這是否足以計算彩色框的位置。

How it should look like

+0

爲什麼你有多種顏色同樣的事情? – Molx

+0

@Molx:提供一個簡單的例子:設想一個餅圖或堆積條形圖,您可以根據性別(男性/女性=藍色/紅色)和收入級別(低/中/高收入=低/中/高強度顏色)。這導致總共6種顏色和顏色強度的組合。隨着您獲得更多類別,有必要分別彙總顏色和強度的圖例,而不是列出所有可能的組合。 –

回答

0

稍微骯髒的黑客可以讓你得到legend()功能給你必要的信息。比我更聰明的人可能會計算出legend()如何計算框定位並將其複製到函數的外部。請注意,編輯標準R函數可能不被推薦。

如果你還沒有編輯R裏面的函數呢,一個簡單的(和暫時的)的方式來訪問它,是打字

fix(legend) 

打字

rm(legend) 

以後將撤消更改。

找到這節說fill <- rep,並添加註釋所指示的線路:

fillList <- NULL ## added 
    if (mfill) { 
     if (plot) { 
      fill <- rep(fill, length.out = n.leg) 
      rect2(left = xt, top = yt + ybox/2, dx = xbox, dy = ybox, 
       col = fill, density = density, angle = angle, 
       border = border) 
      fillList <- data.frame(left = xt, top = yt + ybox/2, dx = xbox, dy = ybox) ## added 
     } 
     xt <- xt + dx.fill 
    } 

找到最後一行,並通過

output <- legend(...) ## replace ... with whatever you want to have as inputs 
將其更改爲

invisible(list(rect = list(w = w, h = h, left = left, top = top), 
     text = list(x = xt, y = yt), fillList=fillList)) ## modified 

現在叫傳說

和繪製三角形使用返回的信息像這樣:

with(output$fillList[1,], { ## first box 
     polygon(c(left, left+dx, left+dx), c(top, top, top-dy), col=myColour, border=NA) 
    }) 

Result

1

這是一個黑客位的,但你可以把兩個傳說在另一個上面。不幸的是,沒有左三角形pch這將是你想要的。

plot(1) 
legend("bottomright",c("Label 1", "Label 2"),pch=22,col=c("red","blue"),pt.bg=c("red","blue"), pt.cex=1.8) 
legend("bottomright",c("Label 1", "Label 2"),pch=21,col=c("green","orange"),pt.bg=c("green","orange")) 

enter image description here

+0

謝謝你,我發現,正是我想要的是不可能沒有'黑客'的內部功能。我將發佈一個解決方案,在短期內做到這一點。 –