Frage
Ein Kollege von mir braucht 101 Volltreffer Diagramme zu zeichnen. Das ist nicht ihre Idee. Anstatt ihre Sklaven haben in Excel entfernt oder Gott weiß, was diese Dinge zu machen, bot ich sie in R zu tun; Abbildung ein Balkendiagramm in Polarkoordinaten ein Bullauge zu machen, ist eine Brise in ggplot2
.
Ich laufe in ein Problem, aber: die Daten bereits aggregiert, so Hadleys Beispiel hier ist nicht für mich arbeiten. Ich konnte die Zählungen aus in einen Faktor zu erweitern, dies zu tun, aber ich fühle mich wie es eine bessere Art und Weise -. Eine Möglichkeit, dem geom_bar zu sagen, wie die Daten lesen
Die Daten sieht wie folgt aus:
Zoo Animals Bears Polar Bears
1 Omaha 50 10 3
Ich werde für jeden Zoo ein Grundstück werden machen -. Aber das ist Teil kann ich verwalten
und hier ist sein dput
:
structure(list(Zoo = "Omaha", Animals = "50", Bears = "10", `Polar Bears` = "3"), .Names = c("Zoo",
"Animals", "Bears", "Polar Bears"), row.names = c(NA, -1L), class = "data.frame")
Hinweis: es ist bezeichnend, dass Tiere> = Bears> = Eisbär. Auch sie ist nicht in der Stadt, also kann ich nicht nur die Rohdaten von ihr (wenn es überhaupt eine große Datei ist, sowieso).
Lösung
Die Art und Weise, dies zu tun, ohne Aufschließschritt ist stat="identity"
in geom_bar
zu verwenden.
Es hilft, den Datenrahmen numerische Werte enthalten, haben eher als Zeichenketten zu starten:
dat <- data.frame(Zoo = "Omaha",
Animals = 50, Bears = 10, `Polar Bears` = 3)
Wir reshape2::melt
tun müssen, um die Daten richtig organisiert zu bekommen:
library(reshape2)
d3 <- melt(dat,id.var=1)
Jetzt die Handlung (identisch mit der anderen Antwort) erstellen:
library(ggplot2)
ggplot(d3, aes(x = variable, y = value)) +
geom_bar(width = 1, colour = "black",stat="identity") +
coord_polar()
Andere Tipps
Während wir für eine bessere Antwort darauf warten, dachte ich, ich sollte die (suboptimal) Lösung schreiben Sie erwähnt. dat
wird die Struktur in Frage enthalten.
d <- data.frame(animal=factor(sapply(list(dat[2:length(dat)]),
function(x) rep(names(x),x))))
cxc <- ggplot(d, aes(x = animal)) + geom_bar(width = 1, colour = "black")
cxc + coord_polar()
Sie können mit inverse.rle
die Daten neu erstellen,
dd = list(lengths = unlist(dat[-1]), values = names(dat)[-1])
class(dd) = "rle"
inverse.rle(dd)
Wenn Sie mehrere Zoos (Zeilen) haben, können Sie versuchen
l = plyr::dlply(dat, "Zoo", function(z)
structure(list(lengths = unlist(z[-1]), values = names(z)[-1]), class = "rle"))
reshape2::melt(llply(l, inverse.rle))