好的Matplotlib爱好者们,我们知道如何绘制甜甜圈图表,但有什么比甜甜圈图表更好的呢?双层甜甜圈图表。具体来说:我们有一组元素,它们属于第一分类的不相交的类别和子类别。甜甜圈图表的外环应该有类别的切片,内环应该有子类别的切片,显然与外部切片对齐。
是否有任何库可以提供这个功能,还是我们需要在这里解决这个问题?
是否有任何库可以提供这个功能,还是我们需要在这里解决这个问题?
width
,而内部饼图的半径将小于或等于1-width
。import matplotlib.pyplot as plt
import numpy as np
fig, ax = plt.subplots()
ax.axis('equal')
width = 0.3
# Outer ring
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')
# Inner ring
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()
注意:我还将这段代码放在了matplotlib画廊中,链接为nested pie example。mylist = map(..,..)
,在Python 3中:mylist = list(map(..,..))
。 - ImportanceOfBeingErnestax.pie()
еҮҪж•°дёӯдҪҝз”Ёwedgeprops
еҸӮж•°пјҡwedgeprops=dict(width=width, edgecolor='white')
гҖӮ - MERose我改编了你提供的示例;你可以通过在同一张图上绘制两个甜甜圈来解决问题,其中一个的外半径较小。
import matplotlib.pyplot as plt
import numpy as np
def make_pie(sizes, text,colors,labels, radius=1):
col = [[i/255 for i in c] for c in colors]
plt.axis('equal')
width = 0.35
kwargs = dict(colors=col, startangle=180)
outside, _ = plt.pie(sizes, radius=radius, pctdistance=1-width/2,labels=labels,**kwargs)
plt.setp( outside, width=width, edgecolor='white')
kwargs = dict(size=20, fontweight='bold', va='center')
plt.text(0, 0, text, ha='center', **kwargs)
# Group colors
c1 = (226, 33, 7)
c2 = (60, 121, 189)
# Subgroup colors
d1 = (226, 33, 7)
d2 = (60, 121, 189)
d3 = (25, 25, 25)
make_pie([100, 80, 90], "", [d1, d3, d2], ['M', 'N', 'F'], radius=1.2)
make_pie([180, 90], "", [c1, c2], ['M', 'F'], radius=1)
plt.show()