2016-12-24 3 views
-1

Ich habe diesen Pandas Datenrahmen:Wie piechart gruppiert create

df = 

GROUP MARK 
ABC  1 
ABC  0 
ABC  1 
DEF  1 
DEF  1 
DEF  1 
DEF  1 
XXX  0 

Ich brauche eine piechart (mit Python oder R) zu erstellen. Die Größe jedes Kuchens sollte der proportionalen Anzahl (d. H. Dem Prozentsatz) von Reihen mit bestimmten GROUP entsprechen. Darüber hinaus sollte jeder Kuchen in 2 Unterteile geteilt werden, die dem Prozentsatz der Reihen mit MARK==1 und MARK==0 innerhalb gegebenen GROUP entsprechen.

Ich googelte für diese Art von Piecharts und fand this one. Aber dieses Beispiel scheint für meinen Fall zu kompliziert zu sein. Ein anderes gutes Beispiel ist in JavaScript gemacht, das wegen der Sprache nicht für mich dient.

Kann jemand mir sagen, was ist der Name dieser Art von Kreisdiagrammen und wo kann ich einige Beispiele von Code in Python oder R.

+0

Sie können die 'highcharter' verwenden, die für die highcharts JS-Bibliothek (verwendet von Ihrem 2. "gutes Beispiel") ein R-Wrapper ist. Ich denke nicht, dass dies eine großartige Möglichkeit ist, die Daten zu präsentieren. – arvi1000

+0

@ arvi1000: Können Sie ein Beispiel für ein Kreisdiagramm veröffentlichen? Ich kann nur Bar-Plots und Zeitreihen finden. – Dinosaurius

+1

Während Sie einen Kuchen verwenden können, glaube ich nicht, dass dies der beste Weg ist, um hierarchische Daten darzustellen. Es gibt viele Alternativen wie eine Treemap oder ein Waffel-Plot. Wenn Sie bei radialen Optionen bleiben wollen, würde ich einen Coxcomb-Plot oder einen Sunburst-Plot betrachten. Alle diese Optionen enthalten Pakete, um das Plotten zu erleichtern. –

Antwort

1

Hier ist eine Lösung in R finden, die nur Basis R verwendet. Nicht sicher, wie Sie Ihre Torten arrangieren möchten, aber ich habe par(mfrow=...) verwendet.

df <- read.table(text=" GROUP MARK 
ABC  1 
ABC  0 
ABC  1 
DEF  1 
DEF  1 
DEF  1 
DEF  1 
XXX  0", header=TRUE) 

plot_pie <- function(x, multiplier=1, label){ 
    pie(table(x), radius=multiplier * length(x), main=label) 
} 

par(mfrow=c(1,3), mar=c(0,0,2,0)) 
invisible(lapply(split(df, df$GROUP), function(x){ 
    plot_pie(x$MARK, label=unique(x$GROUP), 
     multiplier=0.2) 
})) 

Dies ist das Ergebnis:

threepies