在matplotlib中绘制小补丁对象时,由于显示分辨率而引入了伪像。使用抗锯齿并不能解决问题。
这个问题有解决方法吗?
import matplotlib.pyplot as plt
import matplotlib.patches as patches
ax = plt.axes()
for x in range(-10,11):
for y in range(-10,11):
rect = patches.Rectangle((x, y), width=0.1, height=0.1, color='k',aa=True)
ax.add_patch(rect)
plt.xlim([-30, 30])
plt.ylim([-30, 30])
plt.show()
答案 0 :(得分:3)
感谢您将一个简单的问题示例放在一起 - 它确实使调查更加容易!
这个问题有解决方法吗?
是的,事实证明有!我最初的猜测,只是看你附加的图像,是有一些奇怪的剪辑/捕捉正在进行。排除了抗锯齿的可能性(通过轻弹你提供的开关)我唯一的另一种测试途径是将“snap”关键字设置为false(对于snap方法上非常有限的文档,请参阅http://matplotlib.org/api/artist_api.html#matplotlib.artist.Artist.set_snap)。
设置快照可以解决问题,最终得到预期结果:
import matplotlib.pyplot as plt
import matplotlib.patches as patches
ax = plt.axes()
for x in range(-10,11):
for y in range(-10,11):
rect = patches.Rectangle((x, y), width=0.1, height=0.1,
color='k', snap=False)
ax.add_patch(rect)
plt.xlim([-30, 30])
plt.ylim([-30, 30])
plt.show()
视觉比较(可能最好在新窗口中打开图像,因为您的浏览器可能会缩放图像并引入更多视觉效果):
我不是特别了解mpl中的snap属性以及这是否是非常理想的行为,所以我将在mpl-devel邮件列表上发布一个问题,以打开关于这个问题的对话。希望这个答案在此期间能帮到你。