Linux – How to split the wedges of a pie chart to show extra information per wedge in consecutive rings

chartsgnuplotlibreoffice-calclinux

I'm plotting disk partitioning and available space.

I have a pie chart showing the partitioning: e.g. 30% /, 70% /home.

In the second ring I want to show that 90% / is full, 10% of / is empty. 10% /home is full, 90% /home is empty.

How can I generate the 'second' series of the wedges?

Please give example in LibreOffice, gnuplot, matplotlib, etc.

Something like this:

enter image description here

Best Answer

Assume your data is in the format:

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

Try using the reportlab.graphics library (available from the Ubuntu and Fedora repositories as 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')

Sample output:

Sample output of chart

Related Question