python matplotlib 特定大小的重叠矩形

python matplotlib overlapping rectangles at certain size

我正在尝试使用 matplotlib 绘制不同的矩形,它们之间应该有一点间隙,如下例所示:

import matplotlib.pyplot as plt
from matplotlib.patches import Rectangle 
import numpy as np

Nmax = 200

xvalues = np.arange(Nmax)

fig = plt.figure()
ax = plt.subplot(111)

for xvalue in xvalues:
    rect = Rectangle(
        xy=(xvalue - 0.25, xvalue),
        width = 0.5,
        height = 1.5,
        facecolor = 'r',
        edgecolor = 'r',
        )
    ax.add_patch(rect)

ax.autoscale_view()
plt.show()

它正在工作,因为我想为 Nmax = 20 个矩形工作。下面的 Nmax=20 图:

由于矩形位置始终相隔 1 'unit',宽度为 0.5,因此两个相邻矩形之间的间距始终为 0.5。

但是,当我尝试使用 200 个矩形时,矩形会变粗并开始重叠。放大图表后,矩形再次分开。但是将原始图形保存为 pdf 仍然会产生重叠的矩形。 Nmax=200 的 pdf 缩放如下:

我不知道为什么会这样,因为我仍然将它们的宽度指定为 0.5。如果有人能给我一些提示,我会很高兴。 我不确定,但在矢量格式中应该可以准确确定矩形位置,所以也许将其保存为 svg 并将其转换为 pdf 就可以了?

最终解决方案: 好的,感谢 zephyr,解决方案是关闭矩形边缘:

edgecolor = 'none',

在 matplotlib.finance 中将边缘颜色更改为 'none' 也会解决重叠的烛条条,这似乎是相同的问题 here

假设您确实想使用 edgecolor(也就是说,设置 edgecolor='none' 不是一个选项),您可以通过增加创建图形时的figsizedpi

fig = plt.figure(figsize=(12,4), dpi=600)

如果 figsizedpi 足够大,pdf 生成后端将在矩形之间显示白色space:

import matplotlib.pyplot as plt
from matplotlib.patches import Rectangle 
import numpy as np

Nmax = 200
xvalues = np.arange(Nmax)

fig = plt.figure(figsize=(12,4), dpi=600)
ax = plt.subplot(111)

for xvalue in xvalues:
    rect = Rectangle(
        xy=(xvalue - 0.25, xvalue),
        width = 0.5,
        height = 1.5,
        facecolor = 'r',
        edgecolor = 'r',
        )
    ax.add_patch(rect)

ax.autoscale_view()
# plt.show()
plt.savefig('/tmp/test.pdf')

详情:


另一种选择是在创建矩形时减少线宽:

Rectangle(..., edgecolor='b', linewidth=0.01)

感谢 zephyr,解决方案是关闭矩形边缘:

edgecolor = 'none',