2017-05-26 2 views
-3

Ich habe eine list von 40 numerischen Vektoren. Meine Frage ist, wie kann ich ein Boxplot für jeden Vektor machen und alle 4 Boxplots zu einer einzigen Position auf der x-Achse gruppieren.So erstellen Sie Boxplots aus einer Liste von (variable Länge) Vektoren

Das ist die X-Achse wird 10 Ticks haben und jeder Tick hat 4 Box-Plots. Zusätzlich möchte ich die Boxplots nach ihrer Reihenfolge in der Gruppe färben.

Hier eine kleine Auswahl der Daten (zwei Gruppen):

list(
    c(1, 3, 3, 4, 2, 1, 1, 2), 
    c(2, 1, 1, 1, 1, 2, 33, 12), 
    c(5, 3, 2, 1, 2, 3, 4, 5), 
    c(4, 4, 2, 2, 2, 1, 3, 4), 
    c(2, 2, 21, 1, 4), 
    c(3, 3, 1, 2, 3), 
    c(2, 2, 3, 1, 1), 
    c(6, 5, 3, 4, 5)) -> 
ll 
+0

Es ist wahrscheinlich eine einfache Lösung, mit so etwas wie 'ggplot() + geom_bar (aes (Einheit, füllt = Methode), Position = "ausweichen")', aber Sie müssen genauer schaffen Details zu dem, was zB "ähnliche Längen" bedeuten .. Versuchen Sie, eine tatsächliche Stichprobe der Daten bereitzustellen. – liborm

+0

Ich weiß nicht, warum ich drei negative Noten bekommen habe. Die relevante Antwort, die ich fand, war für einen Datenrahmen, dass alle Reihen ähnliche Größe haben. – Eric

+1

Die Down-Stimmen sind wahrscheinlich, weil es eine heroische Anstrengung braucht, um richtig zu verstehen, was der Typ und die Form Ihrer Daten ist. Ich verstehe ganz klar, welche Art von Ausgabe Sie benötigen, aber ich bin wirklich verwirrt über die Eingabedaten. Ist es eine 'Liste' von' Listen', ist es ein 'data.frame'? Gibt es zwei 'data.frame's? – liborm

Antwort

1

Um Boxplots aus einer Liste von numerischen Vektoren und Gruppe in vier Lings zu erstellen, müssen Sie so etwas wie dies tun:

library(tidyverse) 

# ll is the list of vectors 
map_df(ll, 
    function(x) data.frame(val = x), 
    .id = "row") %>% 
    mutate(
    row = as.numeric(row) - 1, 
    grp = floor(row/4) %>% as.factor, 
    method = (row %% 4) %>% as.factor) %>% 
    ggplot() + 
    geom_boxplot(aes(grp, val, fill=method), position = "dodge") 

In Kürze: map_df wandelt jeden Vektor in einen Datenrahmen mit einer Spalte, dann zeilen bindet sie alle, eine Spalte namens row Zugabe, die die ursprüngliche Reihe von woher identifiziert wurde, wandelt mutaterow auf 0 HA sed numerisch und fügt grp und method Spalten basierend auf dem ursprünglichen Vektorindex hinzu (jedes vierte ist die nächste Gruppe mit Modulo), ggplot initialisiert das Diagramm, geom_boxplot fügt einen Boxplot-Layer hinzu, der die Daten aus der Tabelle übernimmt.


Ausgabe für die Beispieldaten (ein wenig hässlich wegen der Ausreißer).

output for the sample data

+0

Dank @liborm. – Eric

Verwandte Themen