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).

War es hilfreich?

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))
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top