我在Python中使用matplotlib。我试图做一个嵌套饼图,其中内环是一种运输方式,外环是它所组成的子部分。
我有这个代码:
import matplotlib.pyplot as plt
import numpy as np
fig, ax = plt.subplots()
size = 0.3
vals = np.array([[60., 32., 13.], [37., 40., 45.], [29., 10., 35.]])
cmap = plt.get_cmap("tab20c")
outer_colors = cmap(np.arange(3)*4)
inner_colors = cmap([1, 2, 3, 5, 6, 7, 9, 10, 11])
ax.pie(vals.sum(axis=1), radius=3-0.9, colors=outer_colors,
wedgeprops=dict(width=0.9, edgecolor='w'),labels=["Car","Public Transport","Bike"],
pctdistance=1.1, labeldistance=0.65)
ax.pie(vals.flatten(), radius=3, colors=inner_colors,
wedgeprops=dict(width=0.9, edgecolor='w'),labels=["Gasoline","Diesel","Electric","Bus","Tram","Train", "Normal Bike","E-Bike","Motorbike"],
pctdistance=1.1, labeldistance=0.85)
ax.set(aspect="equal", title='')
plt.show()
Which leads to this nested pie chart
我想不出如何使子部件的尺寸不同。例如,让我们假设我想添加三轮车和独轮车到自行车类别。因此,汽车和公共交通将是3号,而自行车是5号。
我可以让所有的子部分是2,3或4等。只要VAL阵列中的列表具有相同大小。但是如果我将其中一个设置成不同的大小,那么我将以AxisError结束。有没有什么方法可以修改这个代码,让我可以自由选择他们的大小?
1条答案
按热度按时间dxpyg8gm1#
这是关于数据的结构。
把所有东西都放进一个字典里,用户就可以添加任何他们喜欢的东西,而且数字是一致的。
以下是您的数据示例(为了清楚起见,我删除了彩色图):
结果是这样的: