Matplotlib绘图为空

13
我试图在matplotlib中绘制圆,但结果总是一个空的绘图。 例如:
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.patches as mpatches
import matplotlib.collections as mcollections

fig = plt.figure()
fig.set_size_inches(18.5, 10.5, forward=True)
ax = fig.add_subplot(111, aspect='equal')

x = np.array([17., 29., 41.,  3., 15.])
y = np.array([21., 41., 30., 19., 5.])
r = np.array([22.8035085, 46.04345773, 46.61544808, 16.,  12.16552506])

patches = [mpatches.Circle((xx, yy), rr) for xx, yy, rr in zip(x, y, r)]
collection = mcollections.PatchCollection(patches)
ax.add_collection(collection) 

fig.savefig("test.png")

这会产生一个空的图,当我尝试使用add_artist时也是一样的。希望有人能指出我错在哪里!谢谢


与此处相同的问题:http://stackoverflow.com/questions/42875357/deformed-rectangulars-with-decreasing-trend - ImportanceOfBeingErnest
2个回答

13

除了其他提供的答案,您可以在保存绘图之前使用 ax.autoscale()。这将导致:

输入图像描述


很酷,比我的答案更好。简单胜于复杂 - Feishi
谢谢!!我不知道补丁会这样表现。 - erocoar

5
您的问题不是补丁没有被绘制,而是Matplotlib没有根据您的补丁范围自动调整轴。 通常情况下,主要的绘图函数(如plt.plot()、plt.scatter()等)会自动进行调整。据我所知,它并不适用于绘制几何图形,例如三角形、矩形和圆形。这也可能解释了为什么在Matplotlib中称之为patches
因此,在您的情况下需要手动指定轴的范围,例如使用以下代码:
plt.axis([-50, 100, -50, 100])

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接