gpt4 book ai didi

r - 底座 R 水平图例 - 具有多行

转载 作者:行者123 更新时间:2023-12-02 00:37:36 25 4
gpt4 key购买 nike

我希望使用基本 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)

enter image description here

如果您想要按行排列图例项目,您可以通过按您想要的顺序对它们建立索引来实现此目的。例如

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

enter image description here

为了概括不同的行数和因子,我们可以这样做

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)

enter image description here

最后一个额外技巧:在上图中,我们设置 border=NA。这是为了防止在空图例项(位于不完整列底部的图例项)周围绘制边框。如果您想要边框,那么我们还应该创建一个边框颜色向量,仅在我们不想绘制的位置NA

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

enter image description here

关于r - 底座 R 水平图例 - 具有多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39552682/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com