R Kreidungs- / Akkorddiagramm mit Circlize vom Datenframe erstellen

8

Ich möchte mit dem circlize-Paket ein Akkorddiagramm erstellen. Ich habe einen Datenrahmen, der Autos mit vier Spalten enthält. Die ersten beiden Spalten enthalten Informationen über die Autoband- und Modellbesitz- und die nächsten zwei Spalten zu der Marke und dem Modell, zu dem der Befragte gewandert ist.

Hier ist ein einfaches Beispiel für den Datenrahmen:

%Vor%

Es wäre großartig, wenn wir daraus ein Akkorddiagramm machen könnten. Ich fand ein Beispiel in der Hilfe, die funktionierte, aber ich bin nicht in der Lage, meine Daten in das richtige Format zu konvertieren, um die Handlung zu machen. Dieser Code stammt aus der Hilfe im Circlize-Paket. Dies erzeugt eine Schicht, ich denke, ich brauche zwei, Marke und Modell.

%Vor%

Dieser Code erzeugt das folgende Diagramm:

Ideales Ergebnis wäre wie dieses Beispiel, aber anstelle von Kontinenten würde ich gerne Automarke und im inneren Kreis die Automodelle der Marke haben

    
jonas 16.12.2014, 08:01
quelle

3 Antworten

8

Als ich das Paket ein wenig aktualisiert habe, gibt es jetzt einen einfacheren Weg. Ich werde hier eine andere Antwort geben, falls jemand daran interessiert ist.

In den letzten Versionen von circlize akzeptiert chordDiagram() sowohl die Adjazenzmatrix als auch die Adjazenzliste als Eingabe, dh Sie können jetzt einen Datenrahmen angeben, der eine paarweise Beziehung zur Funktion enthält. Außerdem gibt es eine Funktion highlight.sector() , die mehrere Sektoren gleichzeitig markieren oder markieren kann.

Ich werde die Handlung, die ich vorher gezeigt habe, aber mit kürzerem Code implementieren:

%Vor%

Der Wert für brand , brand_color und model_color ist:

%Vor%

Dieses Mal fügen wir nur einen zusätzlichen Track hinzu, der Zeilen und Markennamen hinzufügt. Und Sie können auch feststellen, dass die Eingabevariable tatsächlich ein Datenrahmen ( df[, c(2, 4)] ) ist.

%Vor%

Wie zuvor werden die Modellnamen manuell hinzugefügt:

%Vor%

Am Ende fügen wir die Zeilen und die Markennamen mit highlight.sector() function hinzu. Hier kann der Wert von sector.index ein Vektor mit einer Länge von mehr als 1 sein, und die Linie (oder ein dünnes Rechteck) deckt alle angegebenen Sektoren ab. Eine Marke wird in der Mitte der Sektoren hinzugefügt und die radikale Position wird durch text.vjust Option gesteuert.

%Vor%

    
Zuguang Gu 23.04.2016, 10:20
quelle
8

Der Schlüssel hier ist, Ihre Daten in eine Matrix (Adjazenzmatrix in welche Zeilen entsprechen 'von' und Spalten entsprechen 'zu').

%Vor%

Wert von mat ist

%Vor%

Dann senden Sie die Matrix an chordDiagram mit Angabe von order und directional . Die manuelle Angabe von order soll sicherstellen, dass die gleichen Marken zusammen gruppiert werden.

%Vor%

Um die Figur komplexer zu machen, können Sie eine Spur für Markennamen erstellen, eine Spur für die Identifizierung von Marken, eine Spur für Modellnamen. Wir auch kann die Lücke zwischen Marken größer als innerhalb jeder Marke.

1 set gap.degree

%Vor%

2 Bevor wir das Akkorddiagramm zeichnen, erstellen wir zwei leere Spuren, eine für Markennamen, eine für Identifikationslinien nach preAllocateTracks argument.

%Vor%

3 Fügen Sie der Annotationsspur den Modellnamen hinzu (diese Spur wird standardmäßig erstellt. die dickere Spur in beiden linken und rechten Zahlen. Beachten Sie, dass dies der dritte Track von ist äußerer Kreis nach innen)

%Vor%

4 Markenidentifikationslinie hinzufügen. Weil Marke mehr als einen Sektor umfasst, brauchen wir um den Anfangs- und Endgrad für die Linie (Bogen) manuell zu berechnen. Im Folgenden rou1 und rou2 sind die Höhe von zwei Rahmen in der zweiten Spur. Die Identifikationslinien sind in der zweiten Spur gezeichnet.

%Vor%

5 Ermitteln Sie zunächst die Koordinate des Textes im Polarkoordinatensystem und ordnen Sie dann der Datenkoordinate zu System von reverse.circlize . Beachten Sie die Zelle, die Sie zuordnen, und die Zelle, die Sie zeichnen sollte die gleiche Zelle sein.

%Vor%

Für die anderen beiden Marken mit demselben Code.

%Vor%

Wenn Sie Farben festlegen möchten, gehen Sie bitte zur Paketvignette. Wenn Sie möchten, können Sie auch circos.axis verwenden, um Achsen in der Zeichnung hinzuzufügen.

    
Zuguang Gu 01.01.2015 22:49
quelle
-1

Lesen Sie Ihre Daten mit read.table ein, was zu einem 7x4 data.frame führt (brand.txt sollte tabulatorgetrennt sein).

%Vor%

Ihre Variablennamen (mt) sind: "Marken_von", "Modell_von", "Marken_zu" und "Modell_zu". Wählen Sie Ihre zwei Variablen aus, zum Beispiel:

%Vor%

Dies ergibt die folgende Tabelle:

%Vor%

Dann können Sie alles gleich aus "rn = rownames (mat)" ausführen, wie Sie es in Ihrem circlize-Skript angegeben haben

    
Ruthger Righart 16.12.2014 08:56
quelle

Tags und Links