matplotlib补丁绘图中的工件

ise*_*rds 7 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()
Run Code Online (Sandbox Code Playgroud)

产量

pel*_*son 6

感谢您整理了一个简单的问题示例 - 它确实使调查这个问题变得更加容易!

这个问题有解决办法吗?

是的,事实证明是有的!我最初的猜测是,通过查看您附加的图像,发生了一些奇怪的剪切/捕捉。在排除了抗锯齿的可能性(通过轻按您提供的开关)后,我唯一的其他测试途径是将“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()
Run Code Online (Sandbox Code Playgroud)

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

快照属性的比较

我对 mpl 中的 snap 属性以及这是否真的是理想的行为不是特别了解,因此我将在 mpl-devel 邮件列表上发布一个问题,以展开有关此问题的对话。希望这个答案能同时帮助您。