2016-08-24 7 views
0

Dies ist mein erster Beitrag, also gehen Sie einfach. Bis jetzt (in den letzten ~ 5 Jahren?) Konnte ich meinen R-Code entweder richtig einstellen oder eine Antwort auf dieser oder verschiedenen anderen Seiten finden. Vertrau mir, wenn ich sage, dass ich nach einer Antwort gesucht habe! Ich habe einen Arbeitsskript den beigefügten boxplot in Grunde R. http://i.stack.imgur.com/NaATo.jpgeinfache Boxplot mit qplot/ggplot2

Das ist in Ordnung zu schaffen, aber ich mag wirklich nur um „Jazz“ es bis in ggplot, für vergeblich Gründe. Ich habe bei den folgenden Fragen gesucht und sie sind in der Nähe, aber nicht abgeschlossen: Why does a boxplot in ggplot requires axis x and y? How do you draw a boxplot without specifying x axis?

Meine Daten sind im Grunde wie „mtcars“, wenn alle numerischen Variablen in der gleichen Größenordnung waren. Alles, was ich tun möchte, ist jede Variable auf dem gleichen Boxplot zu plotten, wie der grundlegende R Boxplot, den ich oben gemacht habe. Meine y-Achse ist die gleiche kontinuierliche Skala (0 bis 1) für jede Box und die x-Achse beschriftet einfach jeden Monat plus einen Jahresdurchschnitt (denke, dass alle Werte der mtcars auf der y-Achse gleich sind und die x-Achse jedes Fahrzeugmodell ist). Jede Box meiner Daten stellt 75 Beobachtungen dar (so ähnlich, wenn die Bergbahnen 75 verschiedene Fahrzeugmodelle hätten), wieder sind alle Boxen auf der gleichen Skala. Was fehlt mir?

+0

'ggplot' erfordert Daten im langen Format. Sie müssen Ihre Daten in ein langes Format konvertieren, z. B. mit "tidyr :: gather" oder "reshape2 :: melt". Dies wird auf 'mtcars' nicht gut demonstrieren, da (a) mtcars keine ID-Variablen für die x-Achse haben (obwohl wir die rownames in eine Spalte umwandeln könnten) und (b) es mit einigen diskreten Daten nicht sehr schön aussehen würde und fast nichts in der gleichen Größenordnung. Aber wenn Sie Ihre Daten in einem langen Format haben, sollte Ihr ggplot so einfach sein wie 'ggplot (long_data, aes (x = Variable, y = Wert)) + geom_boxplot()'. – Gregor

+0

Grundsätzlich, wenn mtcars 75 Fahrzeugmodelle und jede Spalte Variable Zylinder für 10 Spalten war. Jede Zylinderkolonne war ein anderes Jahr. Es umfasste also die Zylinder von 1986 bis 1995. In Basic würde ich einfach schreiben: – chris

+0

SORRY ---, Im Grunde würde ich nur etwas wie schreiben: Boxplot (MTCars $ cyl1986, MTCars $ cyl1987 ...) und so weiter. Aber ich kann nicht für das Leben von mir diesen einfachen Boxplot in ggplot oder qplot tun. Ich weiß, es ist, weil es ein fortgeschritteneres Paket ist, aber immer noch. – chris

Antwort

3

Obwohl ich glaube nicht, mtcars ein großartiges Beispiel dafür macht, hier ist sie:

Erstens haben wir die Daten (hoffentlich) mehr ähnlich wie bei Ihnen durch die Verwendung einer Spalte statt rownames machen.

mt = mtcars 
mt$car = row.names(mtcars) 

Dann umformen wir zu lange Format:

mt_long = reshape2::melt(mt, id.vars = "car") 

Dann die Handlung ist einfach:

library(ggplot2) 
ggplot(mt_long, aes(x = variable, y = value)) + 
    geom_boxplot() 

enter image description here

ggplot mit allen, aber erfordert Daten in "long" -Format eher als "Wide" -Format. Wenn Sie möchten, dass etwas einer grafischen Dimension (X-Achse, Y-Achse, Farbe, Form usw.) zugeordnet wird, dann sollte eine Spalte in Ihren Daten sein. Zum Glück ist es normalerweise recht einfach, Daten im richtigen Format mit reshape2::melt oder tidyr::gather zu erhalten. Ich würde empfehlen, the Tidy Data paper für mehr zu diesem Thema zu lesen.

+0

Grundsätzlich, wenn mtcars 75 Fahrzeugmodelle und jede Spalte Variable nur Zylinder für 10 Spalten wert war. Jede Zylinderkolonne war ein anderes Jahr. Es umfasste also die Zylinder von 1986 bis 1995. Im Basic würde ich einfach etwas schreiben wie: Boxplot (mtcars $ cyl1986, mtcars $ cyl1987 ...) und so weiter.Aber ich kann nicht für das Leben von mir diesen einfachen Boxplot in ggplot oder qplot tun. Ich weiß, es ist, weil es ein fortgeschritteneres Paket ist, aber immer noch. Ich habe diesen Code ausprobiert und etwas ganz anderes bekommen. (kann nicht herausfinden, wie man es an diesen Kommentar anhängen. So ein noob. – chris

+0

Code sollte nicht in Kommentare gehen - es ist sehr eng. Was Sie tun sollten, ist reproduzierbar teilen einige Ihrer tatsächlichen Daten. Setzen Sie, sagen 'dput (dropevels (head (your_data, 20)))) in deiner Frage – Gregor

+0

Das heißt, wenn du eine neue R Sitzung öffnest und den Code ausführst, den ich zeige - vorausgesetzt du hast relativ aktuelle Versionen von 'ggplot2' und' reshape2' "Ich sollte meinen Code kopieren und in diese Antwort einfügen. – Gregor