können Sie die ncol =
Parameter das gewünschte Layout zu erhalten, anstatt horiz
verwenden. Beachten Sie, dass horiz
die ncol
überschreibt, also nicht beide zusammen verwenden. Obwohl dies die Anzahl der Zeilen nicht direkt angibt, geschieht dies indirekt, da die Anzahl der Zeilen durch die Anzahl der Spalten und Faktoren bestimmt wird.
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)
Wenn Sie die Legendenelemente entlang Reihen geordnet zu gestalten, können Sie dies tun, um sie in der gewünschten Reihenfolge durch die Indizierung. Z.B.
MyOrder = as.vector(matrix(1:20, nrow = 4, ncol = 5, byrow = T))
legend("bottom",MyLab[MyOrder], fill=MyCol[MyOrder] ,ncol=5)
für eine unterschiedliche Anzahl von Zeilen und Faktoren verallgemeinern, wir so etwas wie
Nfact = 21
Nrows = 5
Ncols = ceiling(Nfact/Nrows)
MyOrder = as.vector(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)
Und einen letzten Trick tun: In der vorherige Handlung, wir setzen die Grenze = NA. Auf diese Weise wird verhindert, dass um leere Legendenelemente (die am unteren Ende unvollständiger Spalten) Grenzen gezogen werden. Wenn Sie Rahmen möchten, sollten Sie auch einen Vektor mit Rahmenfarben erstellen, der NA
nur an den Stellen ist, die wir nicht zeichnen möchten.
MyBorders = rep("black", Nrows*Ncols)
MyBorders[MyOrder > Nfact] <- NA
legend("bottom", MyLab[MyOrder], fill = MyCol[MyOrder], ncol = Ncols, border=MyBorders)