簡體   English   中英

基本R水平圖例 - 有多行

[英]Base R horizontal legend - with multiple rows

我希望使用基數R(而不是ggplot)創建一個包含多行的水平圖例。 在legend()中有多個列但沒有多行的選項。 有沒有辦法做到這一點? 下面的例子,其中水平圖例對於圖表來說太寬了。

MyCol <- topo.colors(20)
barplot(rep(1,20), yaxt="n", col=MyCol)
x <- 1:20
MyLab <- paste("Zone",x)
legend("bottom",MyLab,fill=MyCol,horiz=T)

您可以使用ncol =參數而不是horiz來獲取所需的布局。 請注意, horiz會覆蓋ncol ,因此請勿同時使用這兩者。 雖然這沒有直接指定行數,但它間接地指定了行數,因為行數由列數和因子確定。

MyCol <- topo.colors(20)
barplot(rep(1,20), yaxt="n", col=MyCol)
x <- 1:20
MyLab <- paste("Zone",x)
legend("bottom",MyLab,fill=MyCol,ncol=5)

在此輸入圖像描述

如果要排列沿行排序的圖例項,可以按所需順序對其進行索引。 例如

MyOrder = matrix(1:20, nrow = 4, ncol = 5, byrow = T)
legend("bottom",MyLab[MyOrder], fill=MyCol[MyOrder] ,ncol=5)

在此輸入圖像描述

為了概括不同數量的行和因子,我們可以做類似的事情

Nfact = 21
Nrows = 5
Ncols = ceiling(Nfact / Nrows)
MyOrder = matrix(1:(Nrows*Ncols), nrow=Nrows, ncol=Ncols, byrow=T)

MyCol <- topo.colors(Nfact)
x <- 1:Nfact
MyLab <- paste("Zone",x)

barplot(rep(1,Nfact), yaxt="n", col=MyCol)
legend("bottom", MyLab[MyOrder], fill = MyCol[MyOrder], ncol = Ncols, border=NA)

在此輸入圖像描述

最后一個額外的技巧:在上一個圖中,我們設置border = NA。 這是為了防止在空圖例項目(不完整列底部的項目)周圍繪制邊框。 如果你想要邊框,那么我們也應該創建一個邊框顏色矢量,只有在我們不想繪制的位置才是NA

MyBorders = rep("black", Nrows*Ncols)
MyBorders[MyOrder > Nfact] <- NA
legend("bottom", MyLab[MyOrder], fill = MyCol[MyOrder], ncol = Ncols, border=MyBorders)

在此輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM