在matplotlib的双圆环图

时间:2017-05-24 08:50:23

标签: python matplotlib plot charts

好吧matplotlib afficionados,我们知道如何绘制donut chart,但什么比甜甜圈图更好?双圆圈图。具体来说:我们有一组元素属于第一类分类的不相交类别和子类别。圆环图应该具有外环中的类别的切片和内环中的子类别的切片,显然与外切片对齐。

是否有任何提供此功能的库或我们是否需要在此处解决此问题?

enter image description here

2 个答案:

答案 0 :(得分:11)

要获得双圆环图,您可以根据需要在同一个地块中绘制尽可能多的饼图。因此外部馅饼的楔形设置为width,内部馅饼的半径小于或等于1-width

import matplotlib.pyplot as plt
import numpy as np

fig, ax = plt.subplots()
ax.axis('equal')
width = 0.3

cm = plt.get_cmap("tab20c")
cout = cm(np.arange(3)*4)
pie, _ = ax.pie([120,77,39], radius=1, labels=list("ABC"), colors=cout)
plt.setp( pie, width=width, edgecolor='white')

cin = cm(np.array([1,2,5,6,9,10]))
labels = list(map("".join, zip(list("aabbcc"),map(str, [1,2]*3))))
pie2, _ = ax.pie([60,60,37,40,29,10], radius=1-width, labels=labels,
                                      labeldistance=0.7, colors=cin)
plt.setp( pie2, width=width, edgecolor='white')
plt.show()

enter image description here

注意:我在matplotlib库中也将此代码作为nested pie example提供。

答案 1 :(得分:4)

我改编了你提供的例子;你可以通过在同一个图上绘制两个甜甜圈来解决你的问题,其中一个的外半径较小。

hash[Date.today] << "¡Yay!" # note the plain date is passed!
hash
#⇒ {"2017-01-09"=>"", ... "2017-01-12"=>"", "2017-05-24" => "¡Yay!"}

enter image description here