2013-05-28 123 views
1

我想將圖例旋轉放置在右側圖形的外部。我可以將圖例置於圖表外,但我無法弄清楚如何旋轉它。我嘗試使用las=2,但這顯然不起作用。注意:我正在使用所有其他座標軸,或者我會將圖例上方的圖例放在兩列中以實現相同的外觀。在基本圖形中旋轉圖例

什麼,我已經一個普通的例子:

par(mar=c(6,4,5,4)+0.1) 
plot(0,type="n") 
legend(x="right", 
     legend=c("Control Chemical","Test Chemcials"), 
     bty="n", 
     fill=c("Darkgreen","Dodgerblue4"), 
     title="Legend Title", 
     inset=c(-0.2,0), 
     xpd=TRUE, 
     horiz=TRUE) 

的利潤率可能需要一些調整,但我可以很容易地讓那些一旦我弄清楚如何轉動的傳說。

爲了進一步澄清,我所希望實現的是類似:

legend(x="top", 
     legend=c("Control Chemical","Test Chemcials"), 
     bty="n", 
     fill=c("Darkgreen","Dodgerblue4"), 
     title="Legend Title",inset=c(0,-0.3), 
     xpd=TRUE, 
     horiz=TRUE) 

但在右軸而不是頂部軸。

+1

我不認爲這是可能的,甚至gridBase不會幫助,因爲它不能使用旋轉視口。有沒有理由不使用lattice/ggplot2/grid? – baptiste

+0

@baptiste最簡單的答案是我還沒有學習ggplot,因爲我已經能夠在基本圖形或格子中完成所需的一切。如果不可能,我可以將右邊距設置得比我想要的大,並在圖形外部放置一個正常的圖例。我已經有很多代碼繪製了非常複雜的情節 - 因此我無法將圖例放置在繪圖區域中。現在,學習如何實現ggplot中的所有圖形功能是不值得的。 – dayne

+0

如果您不介意某種有點醜陋的解決方法,那麼您可能會使用gridBase設置佈局,並在圖例的正確視口圖[光柵化版本](http://stackoverflow.com/a/10097858/471093) 。 – baptiste

回答

3

我能想到的最明智的選擇是在gridBase的幫助下設置兩個繪製區域,併爲圖例使用基於網格的函數(因爲grobs總是可以旋轉)。萊迪思有一個(simpleKey我認爲),但vcd可能有基本版本closest match

請注意,如果您不需要調整窗口大小,那麼您可能根本無法使用gridBase:只需在右側留出足夠的邊距,然後調整x和y座標以便將網格圖例推入正確的位置。

這裏有一個可行的例子,

library(vcd) 
par(mar=c(6,4,5,4)+0.1) 
plot(0,type="n") 

g = grid_legend(0.5, 0.5, pch=c(22,22), col=c("red", "blue"), 
       gp=gpar(fill = c("Darkgreen","Dodgerblue4")), 
       labels=c("Control Chemical","Test Chemicals"), 
       title = "Legend Title", draw=FALSE) 

grid.draw(grobTree(g, vp=viewport(x=0.93,angle=-90))) 

enter image description here

+0

(+1)感謝您的成功案例! – dayne

+0

我不知道這應該是一個額外的問題,但有沒有辦法模仿'vdc :: grid_legend'中'graphics :: legend'的'ncol = 2'或'horiz = TRUE'調用?只是簡單的說明:代碼的填充部分不能像我想的那樣工作。 – dayne

+0

grid_legend看起來相當有限,看着它的代碼。實際上,填充參數在這裏實際上是沒有用的,爲此目的,使用不同顏色的正方形形狀會更好。如果你想要更多的靈活性,你可能需要編寫自己的函數。 – baptiste