Come posso dividere i cunei di un grafico a torta per mostrare informazioni aggiuntive per cuneo in anelli consecutivi?


4

Sto complottando il partizionamento del disco e lo spazio disponibile.

Ho un grafico a torta che mostra il partizionamento: ad es. 30% /, 70% /home.

Nel secondo squillo voglio mostrare che il 90% /è pieno, il 10% /è vuoto. Il 10% /homeè pieno, il 90% /homeè vuoto.

Come posso generare la "seconda" serie di zeppe?

Si prega di fare un esempio in LibreOffice, gnuplot, matplotlib, ecc.

Qualcosa come questo:

inserisci qui la descrizione dell'immagine


2
Forse smettere di puntare su un "diagramma a torta" e iniziare a guardare in un "albero radiale" o "diagramma ad anello" ?
Ƭᴇcʜιᴇ007

@ techie007 certo. Quindi, come posso crearne uno su Linux?
Dima,

Risposte:


3

Supponiamo che i tuoi dati siano nel formato:

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

Prova a usare la reportlab.graphicslibreria (disponibile nei repository Ubuntu e Fedora come 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')

Uscita campione:

Esempio di output del grafico


2

Può anche essere fatto semplicemente in Mathematica (testato sulla versione Linux):

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]

O se vuoi che i colori corrispondano:

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]

Grafico a torta


eccezionale! ora lo stesso usando gli strumenti opensource? =)
Dima,

@Dima: reportlab.graphicsè open-source.
Lumaca meccanica
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.