如何分割餅圖的楔形以在連續環中顯示每個楔形的額外資訊?

如何分割餅圖的楔形以在連續環中顯示每個楔形的額外資訊?

我正在繪製磁碟分割區和可用空間。

我有一個顯示分區的餅圖:例如 30% /, 70% /home

在第二個環中,我想顯示 90%/是滿的,10%/是空的。 10%/home是滿的,90%/home是空的。

如何產生「第二」系列楔子?

請給出 LibreOffice、gnuplot、matplotlib 等中的範例。

像這樣的事情:

在此輸入影像描述

答案1

假設您的資料採用以下格式:

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

嘗試使用該reportlab.graphics庫(可從 Ubuntu 和 Fedora 儲存庫取得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')

範例輸出:

圖表輸出範例

答案2

它也可以在 Mathematica 中非常簡單地完成(在 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]

或者,如果您希望顏色匹配:

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]

圓餅圖

相關內容