Python matplotlib保留楔形面片中的纵横比(饼图)

Python matplotlib保留楔形面片中的纵横比(饼图),python,matplotlib,pie-chart,Python,Matplotlib,Pie Chart,我想在特定位置绘制彩色饼图,而不会扭曲它们的圆形纵横比。我使用楔形补丁,因为我找不到更好的解决方案。这是密码 导入matplotlib.pyplot作为plt 将numpy作为np导入 从matplotlib导入修补程序、集合 图,轴=plt.子批次() 对于范围(20)内的i: x=np.random.uniform(低=0,高=1,大小=10).cumsum() 轴散点(x=x,y=np.重复(i,x.shape[0]),c='gray',s=1) 馅饼=[] N=4 cmap=plt.cm

我想在特定位置绘制彩色饼图,而不会扭曲它们的圆形纵横比。我使用楔形补丁,因为我找不到更好的解决方案。这是密码

导入matplotlib.pyplot作为plt
将numpy作为np导入
从matplotlib导入修补程序、集合
图,轴=plt.子批次()
对于范围(20)内的i:
x=np.random.uniform(低=0,高=1,大小=10).cumsum()
轴散点(x=x,y=np.重复(i,x.shape[0]),c='gray',s=1)
馅饼=[]
N=4
cmap=plt.cm.get_cmap(“hsv”,N+1)
颜色=列表(映射(cmap,范围(N)))
印刷品(颜色)
对于范围(2,2+N)内的i:
θ=np.linspace(0,360,num=i)

assert len(thetas)-1当我设置
set_aspect('equal')
时,它对我来说很好:

我认为,图像缩小是因为y范围比x范围长

如果您将y_lim设置在0和低于y_max的数字之间,您会看到更好的结果:


import matplotlib.pyplot as plt
import numpy as np
from matplotlib import patches, collections

fig, axes = plt.subplots()
for i in range(20):
    x = np.random.uniform(low=0, high=1, size=10).cumsum()
    axes.scatter(x=x, y=np.repeat(i, x.shape[0]), c='gray', s=1)

pies = []
N = 4
cmap = plt.cm.get_cmap("hsv", N + 1)
colors = list(map(cmap, range(N)))
print(colors)

for i in range(2, 2 + N):
    thetas = np.linspace(0, 360, num=i)
    assert len(thetas) - 1 <= len(colors)
    for theta1, theta2, c in zip(thetas[:-1], thetas[1:], colors):
        wedge = patches.Wedge((i, i), r=i / 10, theta1=theta1, theta2=theta2,
                              color=c)
        pies.append(wedge)

axes.add_collection(collections.PatchCollection(pies,
                                                match_original=True))
axes.set_aspect('equal')
axes.set_ylim(0,7.5)
plt.show()

将matplotlib.pyplot作为plt导入
将numpy作为np导入
从matplotlib导入修补程序、集合
图,轴=plt.子批次()
对于范围(20)内的i:
x=np.random.uniform(低=0,高=1,大小=10).cumsum()
轴散点(x=x,y=np.重复(i,x.shape[0]),c='gray',s=1)
馅饼=[]
N=4
cmap=plt.cm.get_cmap(“hsv”,N+1)
颜色=列表(映射(cmap,范围(N)))
印刷品(颜色)
对于范围(2,2+N)内的i:
θ=np.linspace(0,360,num=i)

断言len(thetas)-1这正是我不想要的-我在问题中明确指出,
axes.set\u aspect(“equal”)
不是解决方案。通过剪切ymax,您将丢失数据。