Ich weiß, dass ich wirklich spät dran bin, aber ich denke, ich habe eine ziemlich einfache Lösung gefunden.
Wenn Sie sich den Quellcode von ansehen floating.pie()
(z. B. durch Aufrufen von getAnywhere(floating.pie)
), werden Sie feststellen, dass es einen sehr einfachen und dennoch effektiven Ansatz gibt: Zeichnen der Tortensegmente als Polygone. Wenn Ihre Balkendiagramme nur Balken enthalten sollen (keine Beschriftungen, Achsen usw.), können Sie denselben Ansatz verwenden und Ihre eigene Funktion schreiben. Hier ist eine schnelle und schmutzige Version:
# the function
mapbars <- function (x, xllc = 0, yllc = 0, barwidth=1, maxheight=10){
# calculate how long each bar needs to be
bars <- (x/max(x)) * maxheight
# get some quick colors
col <- rainbow(length(x))
for(i in 1:length(x)){
# figure out x- and y coordinates for the corners
leftx <- xllc + ((i-1) * barwidth)
rightx <- leftx + barwidth
bottomy <- yllc
topy <- yllc + bars[i]
# draw the bar
polygon(x=c(leftx, rightx, rightx, leftx, leftx),
y=c(bottomy, bottomy, topy, topy, bottomy),
col=col[i])
}
}
x
ist für die Werte, die durch die Balken dargestellt werden
xllc
und yllc
geben Sie die Position der linken unteren Ecke des linken Balkens in dem von Ihnen verwendeten Koordinatensystem an
barwidth
und maxheight
werden zum Skalieren der Balkengröße verwendet
Hier ist eine Demo mit einem grundsätzlichen sp
Plot. Ich glaube nicht, dass ich vorher mit gearbeitet habe plotrix
, aber basierend auf der Funktionsweise floating.pie
würde ich davon ausgehen, dass dies auch mit funktionieren sollte plotrix
.
library(sp)
library(maptools) # just for easy access to a background map
# load some country borders as a background
data("wrld_simpl")
plot(wrld_simpl)
# zoom on a bit …
mexico <- subset(wrld_simpl, NAME=="Mexico")
plot(mexico, axes=TRUE)
# data for the bars
x1 <- c(4, 7, 1, 2)
# plot
plot(mexico, axes=TRUE)
mapbars(x=x1, xllc=-110, yllc=20, barwidth=.5, maxheight=5)
legend(x="topright", pch=22, col="black", pt.bg=rainbow(x1), legend=c("foo", "bar", "baz", "foobar"))
# add another one:
x2 <- c(9, 21, 64, 45, 33, 43, 12, 7)
mapbars(x=x2, xllc=-100, yllc=25, barwidth=.2, maxheight=2)
Das Ergebnis sieht so aus:
ggsubplot
Paket macht, aber es ist jetzt veraltet und es wird nicht mehr funktionieren (wie du erwähnt hast). Vielleicht kann dieser Beitrag ein Ausgangspunkt sein: stackoverflow.com/questions/36063043/…