2024-06-16 11:25:55 发布
网友
好的,matplotlib词缀,我们知道如何绘制donut chart,但是有什么比甜甜圈图更好呢?双甜甜圈图表。具体来说:我们有一组元素,它们分为不相交的类别和第一个类别的子类别。甜甜圈图表应该包含外圈中类别的切片和内圈中子类别的切片,显然与外圈对齐。
有没有图书馆提供这个,或者我们需要在这里解决这个问题?
我修改了您提供的示例;您可以通过在同一图形上绘制两个甜甜圈来解决问题,其中一个的外半径较小。
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()
要获得双圆环图,可以在同一绘图中绘制任意多个饼图。因此,外部饼图的楔形设置为width,内部饼图的半径小于或等于1-width。
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()
注意:我在matplotlib库中将此代码作为nested pie example提供。
我修改了您提供的示例;您可以通过在同一图形上绘制两个甜甜圈来解决问题,其中一个的外半径较小。
要获得双圆环图,可以在同一绘图中绘制任意多个饼图。因此,外部饼图的楔形设置为
width
,内部饼图的半径小于或等于1-width
。注意:我在matplotlib库中将此代码作为nested pie example提供。
相关问题 更多 >
编程相关推荐