2010-04-02 1 views
11

In R gegeben, einen VektorWie um einen Faktor gruppiert Daten zu zeichnen, aber nicht als boxplot

casp6 <- c(0.9478638, 0.7477657, 0.9742675, 0.9008372, 0.4873001, 0.5097587, 0.6476510, 0.4552577, 0.5578296, 0.5728478, 0.1927945, 0.2624068, 0.2732615) 

und einen Faktor:

trans.factor <- factor (rep (c("t0", "t12", "t24", "t72"), c(4,3,3,3))) 

ich einen Plot erstellen möchten, wo die Daten Punkte werden wie vom Faktor definiert gruppiert. Die Kategorien sollten also auf der X-Achse liegen, Werte in derselben Kategorie sollten die gleiche X-Koordinate haben.

Einfach tun plot(trans.factor, casp6) macht fast, was ich will, es produziert einen Boxplot, aber ich möchte die einzelnen Datenpunkte sehen.

+0

Sind Sie an Handlung gebunden? Ich weiß, dass dies mit ggplot2 möglich ist. – PaulHurleyuk

+0

Überhaupt nicht. In welchem ​​Paket ist ggplot2? – amarillion

+2

Wie Jonathan geantwortet hat, lässt ggplot2 dies zu, und lässt Sie die Punkte so jittern, dass sich keine zwei Punkte überlappen, wenn sie denselben y-Wert haben. Schauen Sie sich die Website von Hadley an http://had.co.nz/ggplot2/ – PaulHurleyuk

Antwort

12
require(ggplot2) 
qplot(trans.factor, casp6) 
+0

Kurz und gut, danke :) – amarillion

4

Sie können es mit ggplot2, facets verwenden. Wenn ich lese "Ich möchte ein Diagramm erstellen, in dem die Datenpunkte wie durch den Faktor" definiert gruppiert sind, das erste, was mir in den Sinn kam, war facets.

Aber in diesem speziellen Fall sollte schnellere Alternative sein:

plot(as.numeric(trans.factor), casp6) 

Und Sie können danach mit Plotoptionen spielen (type, fg, bg ...), aber ich empfehlen, mit ggplot2, da es klebt hat viel saubereren Code, große Funktionalität, können Sie vermeiden, übermäßig zu plotten ... etc. etc.

Erfahren Sie, wie Sie mit Faktoren umgehen. Du hast BarPlot wenn plot(trans.factor, casp6) weil trans.factor war Klasse von factor Bewertung (ironisch, dass Sie es in einer solchen Herren genannt) ... und trans.factor als solche vor innerhalb plot() Funktion eine kontinuierliche (numerisch) Variable deklariert wurde ... Daher "fühlt" es sich an, Daten zu unterteilen und Boxplot basierend auf jedem Teil zu zeichnen (wenn Sie zuerst eine kontinuierliche Variable deklarieren, erhalten Sie eine gewöhnliche Grafik, richtig?). ggplot2, auf der anderen Seite, interpretiert Faktor in einer anderen Art und Weise ... als „gewöhnliche“, numerische Variable (dies ist für Syntax steht von Jonathan Chang zur Verfügung gestellt, müssen Sie geom angeben, wenn etwas komplexer in ggplot2 tun) .

Aber setzen wir voraus, dass Sie eine kontinuierliche Variable und einen Faktor haben und dass Sie Histogramme auf jeden Teil der kontinuierlichen Variablen anwenden wollen, die durch Faktorstufen definiert sind. Dies ist, wo die Dinge mit grundlegenden Grafikfunktionen kompliziert werden.

# create dummy data 
> set.seed(23) 
> x <- rnorm(200, 23, 2.3) 
> g <- factor(round(runif(200, 1, 4))) 

Durch die Verwendung von Basisgraphen (package:graphics):

par(mfrow = c(1, 4)) 
tapply(x, g, hist) 

ggplot2 Weg:

qplot(x, facets = . ~ g) 

Versuchen Sie, diese in einer Zeile Code mit graphics zu tun (Semikolons und benutzerdefinierte Funktionen in Betracht gezogen werden Betrug!):

qplot(x, log(x), facets = . ~ g) 

Hoffen wir, dass ich dich nicht zu Tode gelangweilt habe, sondern dir geholfen habe!

Mit freundlichen Grüßen,
aL3xa

3

können Sie in der Lage sein, zu nahe zu kommen, was Sie wollen Gitter Grafiken verwenden, indem Sie:

library(lattice)  
xyplot(casp6 ~ trans.factor, 
     scales = list(x = list(at = 1:4, labels = levels(trans.factor)))) 
3

Ich denke, es gibt eine bessere Lösung (schrieb ich es für einen Workshop vor ein paar Tagen), aber es ist mir in den Sinn gekommen. Hier ist ein hässlicher Ersatz mit Basisgrafiken. Fühlen Sie sich frei, die x-Achse zu kommentieren ad libitum. Persönlich mag ich Gregs Lösung.

plot(0, 0, xlim = c(1, 4), ylim = range(casp6), type = "n") 
points(casp6 ~ trans.factor) 
2

Keine extra Paket benötigt

ich ein bisschen spät, um die Partei bin, aber ich fand, dass Sie das gewünschte Ergebnis lässt sich sehr einfach mit dem Standard-Plot Funktion - wandeln Sie einfach den Faktor in einen numerischen Wert um:

+0

Schnell und einfach! Dies benötigt mehr Upvotes – theforestecologist