Como posso dividir as fatias de um gráfico de pizza para mostrar informações extras por fatia em anéis consecutivos?

Como posso dividir as fatias de um gráfico de pizza para mostrar informações extras por fatia em anéis consecutivos?

Estou traçando o particionamento do disco e o espaço disponível.

Eu tenho um gráfico de pizza que mostra o particionamento: por exemplo, 30% /, 70% /home.

No segundo anel quero mostrar que 90% /está cheio e 10% /está vazio. 10% /homeestá cheio, 90% /homeestá vazio.

Como posso gerar a 'segunda' série de cunhas?

Por favor, dê exemplos no LibreOffice, gnuplot, matplotlib, etc.

Algo assim:

insira a descrição da imagem aqui

Responder1

Suponha que seus dados estejam no formato:

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

Tente usar a reportlab.graphicsbiblioteca (disponível nos repositórios Ubuntu e Fedora como 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')

Exemplo de saída:

Exemplo de saída do gráfico

Responder2

Também pode ser feito de forma bastante simples no Mathematica (testado na versão 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]

Ou se você quiser que as cores combinem:

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]

Gráfico de pizza

informação relacionada