
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 % /home
sind voll, 90 % /home
sind leer.
Wie kann ich die „zweite“ Reihe der Keile erzeugen?
Bitte geben Sie Beispiele in LibreOffice, Gnuplot, Matplotlib usw.
Etwas wie das:
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.graphics
Bibliothek 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:
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]