2017-06-04 2 views
5

Ich stehe vor einer Schwierigkeit beim Plotten eines parallelen Koordinaten-Plots mit dem ggparcoord aus dem GGally-Paket. Da es zwei kategorische Variablen gibt, ist das, was ich in der Visualisierung zeigen möchte, wie das Bild unten. Ich habe festgestellt, dass in ggparcoord, groupColumn ist nur zulässig eine einzelne Variable zu gruppieren (Farbe) von, und ich kann ShowPoints sicherlich verwenden, um die Werte auf den Achsen zu markieren, aber ich muss auch die Form ändern diese Marker nach den kategorialen Variablen. Gibt es ein anderes Paket, das mir helfen kann, meine Idee zu verwirklichen?So zeichnen Sie parallele Koordinaten mit mehreren kategorialen Variablen in R

Jede Antwort wird geschätzt! Vielen Dank!

university and country are two categories

+0

Was geschrieben Sie sind schöner als die Antwort, wie es die zeigt Bereich von jeder Koordinate und nicht nur den standardisierten Bereich ... – Chris

Antwort

1

Es ist nicht so schwierig, Ihre eigenen parallelen Koordinaten Grundstück in ggplot2 zu rollen, die Ihnen die Flexibilität, die Ästhetik anpassen geben. Unten ist eine Illustration mit dem eingebauten diamonds Datenrahmen.

Um parallele Koordinaten zu erhalten, müssen Sie eine ID Spalte hinzufügen, damit Sie jede Zeile des Datenrahmens identifizieren können, die wir als group Ästhetik in ggplot verwenden. Sie müssen auch scale die numerischen Werte, so dass sie alle auf der gleichen vertikalen Skala sind, wenn wir sie plotten. Dann müssen Sie alle gewünschten Spalten auf der X-Achse nehmen und sie in ein "langes" Format umformen. Wir machen das alles im laufenden Betrieb mit dem Rohrführer tidyverse/dplyr.

Auch nach der Begrenzung der Anzahl der Kategorienkombinationen sind die Zeilen wahrscheinlich zu eng miteinander verwoben, damit diese Darstellung leicht interpretierbar ist. Betrachten Sie dies als bloßen "Proof of Concept". Hoffentlich können Sie etwas Nützlicheres mit Ihren Daten erstellen. Ich habe colour (für die Linien) und fill (für die Punkte) Ästhetik unten verwendet. Sie können stattdessen shape oder linetype verwenden, je nach Ihren Bedürfnissen.

library(tidyverse) 
theme_set(theme_classic()) 

# Get 20 random rows from the diamonds data frame after limiting 
# to two levels each of cut and color 
set.seed(2) 
ds = diamonds %>% 
    filter(color %in% c("D","J"), cut %in% c("Good", "Premium")) %>% 
    sample_n(20) 

ggplot(ds %>% 
     mutate(ID = 1:n()) %>%    # Add ID for each row 
     mutate_if(is.numeric, scale) %>% # Scale numeric columns 
     gather(key, value, c(1,5:10)),  # Reshape to "long" format 
     aes(key, value, group=ID, colour=color, fill=cut)) + 
    geom_line() + 
    geom_point(size=2, shape=21, colour="grey50") + 
    scale_fill_manual(values=c("black","white")) 

enter image description here

Ich habe ggparcoords noch nie benutzt, aber die einzige Option, die (zumindest auf meinem ersten Versuch mit der Funktion) einfach schien, war zusammen zwei Spalten mit Daten einzufügen. Unten ist ein Beispiel. Selbst mit nur vier Kategorie-Kombinationen, die Handlung ist verwirrend, aber vielleicht wird es interpretierbar sein, wenn es starke Muster in den Daten:

library(GGally) 

ds$group = with(ds, paste(cut, color, sep="-")) 

ggparcoord(ds, columns=c(1, 5:10), groupColumn=11) + 
    theme(panel.grid.major.x=element_line(colour="grey70")) 

enter image description here

+0

Danke für Ihre Hilfe. Anstatt GGally zu verwenden, verwende ich ggplot2, um parallele Koordinaten mit mehreren kategorischen Variablen zu zeichnen, nachdem ich meine Daten in ein sehr dünnes langes Format umgewandelt habe ... aber das Problem ist, dass ich diese Y-Achsen nicht skalieren kann. Tatsächlich gibt es nur eine Y-Achse in meinem Plot, aber nachdem ich das Theme-Grid geändert habe, lasse ich die Plot-Darstellung wie mehrere y-Achsen aussehen ... Was ich wirklich will, ist, dass ich alle "y-Achsen skalieren kann Zeichnen Sie besser lesbar, genau wie das Bild, das ich in der Frage anbrachte, wo die Skala für jede y-Achse variiert. Ist es möglich? – Lexi

Verwandte Themen