R Kreis/Akkord-Diagramm mit circlize von dataframe

Ich würde gerne ein Akkord-Diagramm zu den circlize Paket . Ich habe einen dataframe mit Autos mit vier Spalten. Die 2 ersten Spalten enthält Informationen über die Auto-band-und Modell-Eigentum und die nächsten zwei Spalten, um die Marke und das Modell der Beklagte migriert.

Hier ist ein einfaches Beispiel, das dataframe:

   Brand_from model_from Brand_to Model_to
1:      VOLVO        s80      BMW  5series
2:        BMW    3series      BMW  3series
3:      VOLVO        s60    VOLVO      s60
4:      VOLVO        s60    VOLVO      s80
5:        BMW    3series     AUDI       s4
6:       AUDI         a4      BMW  3series
7:       AUDI         a5     AUDI       a5

Wäre es toll, in der Lage zu machen diese zu einem Akkord-Diagramm. Ich fand ein Beispiel in der Hilfe gearbeitet, aber ich bin nicht in der Lage zu konvertieren meiner Daten in das richtige format, um den plot.
Dieser code ist aus der Hilfe in die circlize Paket. Dies erzeugt eine Schicht, ich glaube, ich muss zwei, Marke und Modell.

mat = matrix(1:18, 3, 6)
rownames(mat) = paste0("S", 1:3)
colnames(mat) = paste0("E", 1:6)

rn = rownames(mat)
cn = colnames(mat)
factors = c(rn, cn)
factors = factor(factors, levels = factors)
col_sum = apply(mat, 2, sum)
row_sum = apply(mat, 1, sum)
xlim = cbind(rep(0, length(factors)), c(row_sum, col_sum))

par(mar = c(1, 1, 1, 1))
circos.par(cell.padding = c(0, 0, 0, 0))
circos.initialize(factors = factors, xlim = xlim)
circos.trackPlotRegion(factors = factors, ylim = c(0, 1), bg.border = NA,
                       bg.col = c("red", "green", "blue", rep("grey", 6)), track.height = 0.05,
                       panel.fun = function(x, y) {
                         sector.name = get.cell.meta.data("sector.index")
                         xlim = get.cell.meta.data("xlim")
                         circos.text(mean(xlim), 1.5, sector.name, adj = c(0.5, 0))
})

col = c("#FF000020", "#00FF0020", "#0000FF20")
for(i in seq_len(nrow(mat))) {
  for(j in seq_len(ncol(mat))) {
    circos.link(rn[i], c(sum(mat[i, seq_len(j-1)]), sum(mat[i, seq_len(j)])),
                cn[j], c(sum(mat[seq_len(i-1), j]), sum(mat[seq_len(i), j])),
                col = col[i], border = "white")
  }
}
circos.clear()

Dieser code erzeugt folgenden plot:

R Kreis/Akkord-Diagramm mit circlize von dataframe

Ideale Ergebnis wäre, wie in diesem Beispiel, sondern der Kontinente möchte ich Auto Marke und auf den inneren Kreis der Auto-Modelle gehört zur Marke
R Kreis/Akkord-Diagramm mit circlize von dataframe

InformationsquelleAutor jonas | 2014-12-16
Schreibe einen Kommentar