【问题标题】:Weird behavior of matplotlib plt.Rectanglematplotlib plt.Rectangle 的奇怪行为
【发布时间】:2018-09-26 12:48:06
【问题描述】:

我正在尝试制作“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")

导致以下输出:

如您所见,输出正是我所期望的。伟大的 ! 但是,我玩的是参数...

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

这里是更改后的代码(唯一更改的是顶部矩形的宽度,从 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);

现在输出如下所示:

如果我打开pdf输出并放大,你会明白我的意思:

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

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

1000:

1000 -> 缩放:

2000:

2000 -> 缩放:

3000:

3000 -> 缩放:

还有……

10000

10000 -> 缩放:

【问题讨论】:

  • 我猜测这与图表的尺寸有关。也许尝试增加图表的维度。
  • @scales 我尝试了你的想法,添加: fig, ax = plt.subplots(figsize=(5,2), dpi=200, facecolor='w', edgecolor='k')但它并没有改变结果......
  • 你可以尝试使用 1000, 2000, 3000,4000 来看看是否有一些交叉点吗?
  • 我认为 pdf 导出中的恒定 dpi 存在一些问题,这可能导致位置错误多达 1/72 英寸。请随时通过the issue tracker 提出问题。
  • @Bazingaa 请看看我的编辑。随着长度的增加,错误似乎变得更糟。

标签: python matplotlib


【解决方案1】:

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

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

这解决了问题! :)

原因:

线宽 1 pt,与矩形边缘重叠 0.5 pt。你 正在制作的地块如此之小以至于可见。

【讨论】:

    猜你喜欢
    • 2020-10-21
    • 2020-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多