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
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:
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.
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.
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
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.
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
2 Bevor wir das Akkorddiagramm zeichnen, erstellen wir zwei leere Spuren, eine für Markennamen,
eine für Identifikationslinien nach preAllocateTracks
argument.
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.
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.
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.
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
Tags und Links r plot chord-diagram circlize