在 matplotlib 中将多个饼图分解在一起

2024-03-17

我真的很喜欢 matplotlib 饼图上的“爆炸”选项。我希望能够“集体爆发”。我正在绘制许多小切片,分为 3 或 4 类。我想将所有小切片作为组爆炸在一起。

我认为这并不完全清楚,所以我呼吁我严重缺乏绘制基本形状的能力,并制作这张图片来展示我正在尝试做的事情:

请注意各组之间微小的无阴影间隙。

这可能吗?

非常感谢,亚历克斯


我不知道有任何直接的方法来指定分组的爆炸饼图,但是使用补丁来重绘具有以下组的饼图非常简单

# original part (left)
import numpy as np
import matplotlib.pyplot as plt
f,ax = plt.subplots(1,2) 
ax[0].set_aspect('equal')
data=np.abs(np.random.randn(7))
wedges, texts = ax[0].pie(data)

# redraw plot using patches (right)
import matplotlib.patches as mpatches
from matplotlib.collections import PatchCollection
ax[1].set_aspect('equal')
ax[1].axis('off')

groups=[[0,1,2],[3,4],[5,6]]
radfraction = 0.1
patches = []
for i in groups:
  ang = np.deg2rad((wedges[i[-1]].theta2 + wedges[i[0]].theta1)/2,)
  for j in i:
    we = wedges[j]
    center = (radfraction*we.r*np.cos(ang), radfraction*we.r*np.sin(ang))
    patches.append(mpatches.Wedge(center, we.r, we.theta1, we.theta2))

colors = np.linspace(0, 1, len(patches))
collection = PatchCollection(patches, cmap=plt.cm.hsv)
collection.set_array(np.array(colors))
ax[1].add_collection(collection)
ax[1].autoscale(True)

This may result in a plot like
enter image description here

当然,您可以简单地根据您的数据计算所需的 theta 角,而不是使用预先计算的角度。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 matplotlib 中将多个饼图分解在一起 的相关文章

随机推荐