matplotlib补丁绘图中的工件

时间:2012-12-11 15:24:10

标签: matplotlib

在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()

output

1 个答案:

答案 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()

视觉比较(可能最好在新窗口中打开图像,因为您的浏览器可能会缩放图像并引入更多视觉效果):

comparison of the snap property

我不是特别了解mpl中的snap属性以及这是否是非常理想的行为,所以我将在mpl-devel邮件列表上发布一个问题,以打开关于这个问题的对话。希望这个答案在此期间能帮到你。