python - 如何使用 matplotlib 在圆环饼图中制作子图?
问题描述
如何使用 Python 的 matplotlib 制作甜甜圈饼图的子图?
下面是我写的代码:
import matplotlib.pyplot as plt
labels = 'Frogs', 'Hogs', 'Dogs'
sizes = [15, 30, 45]
colors = ['yellowgreen', 'gold', 'lightskyblue']
explode = (0, 0, 0) # explode a slice if required
subgroup_names = ['A.1', 'A.2', 'A.3', 'B.1', 'B.2', 'C.1']
subgroup_size = [13, 3, 5, 6, 5, 10]
a, b, c = [plt.cm.Blues, plt.cm.Reds, plt.cm.Greens]
plt.pie(sizes, explode=explode, labels=labels, pctdistance=0.45, labeldistance=0.65, colors=colors, autopct='%.2f%%', shadow=True)
centre_circle = plt.Circle((0, 0), 0.175, color='black', fc='white', linewidth=1.25)
plt.pie(subgroup_size, labels=subgroup_names, pctdistance=0.85, labeldistance=1.25, colors=[a(0.5), a(0.4), a(0.3), b(0.5), b(0.4), c(0.6)], autopct='%.2f%%', shadow=True)
centre_circle2 = plt.Circle((0, 0), 0.275, color='red', fc='white', linewidth=1.25)
fig = plt.gcf()
fig.gca().add_artist(centre_circle)
fig.gca().add_artist(centre_circle2)
plt.axis('equal')
plt.show()
结果如下图所示:
但我希望结果类似于下图:
(我必须显示百分比值)
解决方案
Matplotlib 文档为您梦寐以求的几乎所有内容提供了非常好的示例。请在此处查看嵌套饼图。
在对仅链接答案的评论之后,关键字 radius 是您在调用 pie() 时要查找的内容。它接受一个浮点数,它决定了你的馅饼的绝对半径。因此,绘制嵌套的饼图需要多次调用 pie(),每个都具有不同的半径值。请看下面的例子
import matplotlib.pyplot as plt
plt.pie([1, 2, 3], radius=1,
colors=['xkcd:cerulean', 'xkcd:bright red', 'xkcd:grass green'],
labels=['Group A', 'Group B', 'Group C'], autopct='%.2f%%',
pctdistance=0.85, shadow=True,
wedgeprops=dict(width=0.3, edgecolor='white'))
plt.pie([0.3, 0.7, 0.4, 1.5, 0.1, 3], radius=0.7,
colors=['xkcd:sky blue', 'xkcd:light blue', 'xkcd:reddish pink',
'xkcd:salmon pink', 'xkcd:baby pink', 'xkcd:apple green'],
wedgeprops=dict(width=0.3, edgecolor='white'),
labels=['A.1', 'A.2', 'B.1', 'B.2', 'B.3', 'C.1'], autopct='%.2f%%',
pctdistance=0.8, labeldistance=0.4, shadow=True)
plt.axis('equal')
plt.show()
推荐阅读
- javascript - 向下滚动更改文本颜色不起作用?
- python - 带输入和 int 的 ValueError
- ios - How to use a dynamic framework in a framework?
- javascript - 奇怪的异步代码行为
- c - 从文件中读取字符矩阵
- reactjs - 将整个全局状态传递给“mapStateToProps”
- r - 根据缩放在交互式绘图上重新缩放 y 轴
- ruby - 当 chef-client 运行不成功时,如何编写 chef_handler 来发送邮件?
- kubernetes - Kubernetes服务之间的通信
- ionic-framework - 离子服务稍后再试[无法加载 index.html]