Wie kann ich die Segmente eines Kreisdiagramms aufteilen, um in aufeinanderfolgenden Ringen zusätzliche Informationen pro Segment anzuzeigen?

Wie kann ich die Segmente eines Kreisdiagramms aufteilen, um in aufeinanderfolgenden Ringen zusätzliche Informationen pro Segment anzuzeigen?

Ich plane die Festplattenpartitionierung und den verfügbaren Speicherplatz.

Ich habe ein Kreisdiagramm, das die Aufteilung zeigt: zB 30% /, 70% /home.

Im zweiten Ring möchte ich zeigen, dass 90 % /voll und 10 % /leer sind. 10 % /homesind voll, 90 % /homesind leer.

Wie kann ich die „zweite“ Reihe der Keile erzeugen?

Bitte geben Sie Beispiele in LibreOffice, Gnuplot, Matplotlib usw.

Etwas wie das:

Bildbeschreibung hier eingeben

Antwort1

Angenommen, Ihre Daten liegen im folgenden Format vor:

data = {
    # partition: (frac of disk, frac full)
    "/": (0.3, 0.9),
    "/home": (0.7, 0.1),
}

Versuchen Sie, die reportlab.graphicsBibliothek zu verwenden (verfügbar in den Ubuntu- und Fedora-Repositories als python-reportlab):

from reportlab.graphics.shapes import Drawing
from reportlab.graphics.charts.piecharts import Pie
from reportlab.graphics import renderSVG
from itertools import chain
d = Drawing(400, 400)

outerPie = Pie()
outerPie.x = outerPie.y = 0
outerPie.width = outerPie.height = 400
# 2 slices for each sector (used, unused)
outerPie.data = list(chain(*[
    [fracDisk * fracPart, fracDisk * (1 - fracPart)]
    for (fracDisk, fracPart) in data.values()]))
d.add(outerPie, '')

# Draw smaller pie chart on top of outerPie, leaving outerPie as a ring
innerPie = Pie()
innerPie.x = innerPie.y = 100
innerPie.width = innerPie.height = 200
innerPie.data = [t[0] for t in data.values()]
innerPie.labels = list(data)
d.add(innerPie, '')

renderSVG.drawToFile(d, 'chart.svg')

Beispielausgabe:

Beispielausgabe des Diagramms

Antwort2

Dies lässt sich auch ganz einfach in Mathematica durchführen (getestet auf der Linux-Version):

data = {{"/", 0.3, 0.9}, {"/home", 0.7, 0.1}};
PieChart[{
  Labeled[#[[2]], #[[1]]] & /@ data,
  Flatten[{Labeled[#[[2]] *    #[[3]] , "used"], 
           Labeled[#[[2]] * (1-#[[3]]), "free"]} & /@ data]
}, SectorSpacing -> 0]

Oder wenn Sie möchten, dass die Farben übereinstimmen:

data = {{"/", 0.3, 0.9, Red}, {"/home", 0.7, 0.1, Blue}};
PieChart[{
  Style[Labeled[#[[2]], #[[1]]], #[[4]]] & /@ data,
  Flatten[{Style[Labeled[#[[2]] *    #[[3]] , "used"], #[[4]]], 
           Style[Labeled[#[[2]] * (1-#[[3]]), "free"], Lighter@#[[4]]]} & /@ data]
}, SectorSpacing -> 0]

Kuchendiagramm

verwandte Informationen