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


感谢您汇总了一个简单的问题示例 - 它真的让调查更容易!

有没有解决这个问题的方法?

是的,事实证明有! 我最初的猜测是,只要看看你附加的图像,就会发现一些奇怪的剪辑/捕捉。 在排除了抗锯齿的可能性之后(通过轻弹你提供的开关),我唯一的另一个测试途径是将“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中的捕捉属性并不是特别了解,并且这是否是真正理想的行为,因此我将在mpl-devel邮件列表上发布一个问题,以打开关于此问题的对话。 希望这个答案能在这段时间帮助你。

链接地址: http://www.djcxy.com/p/11575.html

上一篇: Artifacts in matplotlib patch plotting

下一篇: SDL2 OpenGL3 How to initialize SDL inside a function