matplotlib plt.Rectangle的奇怪行为

jam*_*mes 5 python matplotlib

我试图制作一个" matplotlib蛋糕 ".;)

我有以下代码:它应该打印一个蓝色和一个红色矩形,除以绿色"涂层".

import matplotlib.pyplot as plt

def save_fig(layer):
    # Hide the right and top spines
    ax.spines['right'].set_visible(False)
    ax.spines['top'].set_visible(False)
    # Sacale axis
    plt.axis('scaled')
    fig.savefig(layer+'.pdf', dpi=fig.dpi)
    fig.savefig(layer+'.jpeg', dpi=fig.dpi)

gap =10
fig, ax = plt.subplots()
rectangle_gap = plt.Rectangle((0-gap, 0), 500+2*gap, 100+gap, color ="green");
plt.gca().add_patch(rectangle_gap);
rectangle = plt.Rectangle((0, 0), 500, 100, color = "red");

plt.gca().add_patch(rectangle)
rectangle = plt.Rectangle((0, 100+gap), 500, 100, color = "blue");
plt.gca().add_patch(rectangle);


save_fig("test")
Run Code Online (Sandbox Code Playgroud)

这导致以下输出: 在此输入图像描述

正如您所看到的,输出正是我所期望的.好极了!但是,我玩了参数......

如果我将顶部蓝色矩形的宽度设置得很长,它会以某种方式进入绿色分隔涂层......

这是更改的代码(唯一改变的是顶部矩形的宽度,从500到5000):

gap =10
fig, ax = plt.subplots()
rectangle_gap = plt.Rectangle((0-gap, 0), 500+2*gap, 100+gap, color ="green");
plt.gca().add_patch(rectangle_gap);
rectangle = plt.Rectangle((0, 0), 500, 100, color = "red");

plt.gca().add_patch(rectangle)
rectangle = plt.Rectangle((0, 100+gap), 5000, 100, color = "blue");
plt.gca().add_patch(rectangle);
Run Code Online (Sandbox Code Playgroud)

现在输出如下:

在此输入图像描述

如果我打开pdf输出并放大,你可以看到我的意思:

在此输入图像描述

为什么会这样,我该如何解决?

编辑:正如@Bazingaa所建议的,我试过:

1000:

在此输入图像描述

1000 - > zoom:

在此输入图像描述

2000:

在此输入图像描述

2000 - > zoom:

在此输入图像描述

3000:

在此输入图像描述

3000 - > zoom:

在此输入图像描述

和...

10000

在此输入图像描述

10000 - >缩放:

在此输入图像描述

小智 0

回答:我在 github 上被告知要执行以下操作:

将所有矩形的线宽属性设置为 0 (linewidth=0)。

这解决了问题!:)

原因:

该线宽 1 磅,与矩形边缘重叠 0.5 磅。你画的图太小了,看得见。