2011-01-11 12 views
0

Wie generieren Sie ein gruppiertes Cleveland-Punktdiagramm (Punktdiagramm), in dem die Daten in jeder Untergruppe vom höchsten zum niedrigsten Satz sortiert werden, wenn Ihre Eingabe eine Matrix ist?Sortieren eines Punktdiagramms mit Matrixeingabe in R

beispielsweise R ein schönes Einbau-Beispiel eines dotchart hat Gruppen mit einer Matrix als Eingabe:

dotchart(VADeaths, main = "Death Rates in Virginia - 1940") 

In diesem speziellen Beispiel sind die Daten bereits in jeder Kategorie für jedes der sortierten Gruppen (ländliche männlich, ländliche Frauen, etc.). Wenn dies jedoch nicht der Fall ist, wie lauten die R-Befehle zum Generieren eines Plots, so dass die Datenpunkte in jeder Untergruppe vom höchsten zum niedrigsten sortiert werden?

Antwort

1

Wenn Sie nicht wollen, verwenden könnten auf Ihre Daten von den Spaltennamen zu bestellen, als @DWin vorgeschlagen, sondern ausschließlich auf numerische Daten, können Sie versuchen:

# get data 
data <- VADeaths[sample(1:5), ] 
# order data by first row's numeric values 
data <- data[order(data[,1]),] 
dotchart(data) 

Hinweis: dies ist nur den Datenrahmen von der ersten Spalte sortieren wird! Es ist nicht möglich, jede Spalte in einer Tabelle zu sortieren, ohne für jede Spalte andere Rownames anzugeben, was mit der Tabellenklasse definitiv nicht möglich ist.

Wenn Sie bei Ihrer ursprünglichen Frage bleiben: Ich würde vorschlagen, die Daten durch die Spalten aufzuteilen, zeichnen Sie das Diagramm für jede sortierte Spalte und stapeln Sie diese in einem Layout.

+0

Gibt es eine einfache Möglichkeit, das Spalten und Stapeln durchzuführen? –

+1

@lorin - das sollte eine neue Frage sein, um tief, aber kurz antworten zu können: nach 'Split'- und' Par'-Funktionen zu schauen. Suchen Sie später nach 'mfrow' und' mfcol'. – daroczig

+0

Hinzugefügt als http://stackoverflow.com/questions/4687879/splitting-the-columns-of-a-matrix-sorted-dotchart-of-each-one-then-laying-out-i –

1

Dies zeigt die Erstellung einer Matrix mit beliebiger Zeilenreihenfolge und wie man sie in die richtige Reihenfolge wiederherstellen kann.

> set.seed(123) 
> VA2 <- VADeaths[sample(1:5), ] 
> VA2 
     Rural Male Rural Female Urban Male Urban Female 
55-59  18.1   11.7  24.3   13.6 
65-69  41.0   30.9  54.6   35.1 
70-74  66.0   54.3  71.1   50.0 
60-64  26.9   20.3  37.0   19.3 
50-54  11.7   8.7  15.4   8.4 
> VA2[order(rownames(VA2)), ] 
     Rural Male Rural Female Urban Male Urban Female 
50-54  11.7   8.7  15.4   8.4 
55-59  18.1   11.7  24.3   13.6 
60-64  26.9   20.3  37.0   19.3 
65-69  41.0   30.9  54.6   35.1 
70-74  66.0   54.3  71.1   50.0 

Wenn Sie mit ungeordneten COLNAMES konfrontiert wurden, aber nicht etwas, mit der gewünschten lexikalischen Reihenfolge Sie nur ein Zeichen Vektor in der richtigen Reihenfolge mit „[“

> c2 <- c("Rural Male", "Rural Female", "Urban Male" , "Urban Female") 
> VA3 <- VA2[ , sample(1:4)] 
> VA3 
     Rural Male Rural Female Urban Male Urban Female 
55-59  18.1   11.7  24.3   13.6 
65-69  41.0   30.9  54.6   35.1 
70-74  66.0   54.3  71.1   50.0 
60-64  26.9   20.3  37.0   19.3 
50-54  11.7   8.7  15.4   8.4 
> VA3[ , c2] 
     Rural Male Rural Female Urban Male Urban Female 
55-59  18.1   11.7  24.3   13.6 
65-69  41.0   30.9  54.6   35.1 
70-74  66.0   54.3  71.1   50.0 
60-64  26.9   20.3  37.0   19.3 
50-54  11.7   8.7  15.4   8.4 
+0

Es sind nicht die rownames oder colnames, die ich möchte sortiert, was ich möchte, ist die Datenwerte für jede Untergruppe im Diagramm angeordnet. Ich möchte, dass die Punkte für jede Gruppierung vom größten Wert zum kleinsten Wert angezeigt werden. Das Problem ist, dass dies nicht einfach durch Manipulieren der Matrix erfolgen kann, da die Reihenfolge von Untergruppe zu Untergruppe variiert. –

+0

Dann sortieren nach was auch immer Sie interessiert sind. Die Anordnung der dargestellten Matrixspalten und -reihen bestimmt das Layout der y-Achse des Punktdiagramms. –

Verwandte Themen