我试图用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'单位',宽度为0.5,因此两个相邻矩形之间的间距始终为0.5。
然而,当我尝试例如200个矩形时,矩形变得更厚并开始重叠。在放大图形时,矩形再次分离。但是将原始数字保存为pdf仍然会产生重叠的矩形。放大pdf,Nmax = 200以下:
我不知道为什么会这样,因为我还指定它们的宽度为0.5。如果有人能给我一个暗示,我会很高兴的。我不确定但是在矢量格式中应该可以准确地确定矩形位置,所以可能将其保存为svg并将其转换为pdf就可以了?
最终解决方案:好的,感谢西风,解决方案是关闭矩形边缘:
edgecolor = 'none',
在matplotlib.finance中将edgecolor更改为'none'也可以解决重叠的烛台条,这似乎是同样的问题here
假设你确实想要使用edgecolor
(也就是说,设置edgecolor='none'
不是一个选项),你可以生成一个PDF,通过在创建图形时增加figsize
和dpi
来显示框之间的空间:
fig = plt.figure(figsize=(12,4), dpi=600)
如果figsize
和dpi
足够大,则生成pdf的后端将显示矩形之间的空白:
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时减小线宽:
Rectangle(..., edgecolor='b', linewidth=0.01)
感谢西风,解决方案是关闭矩形边缘:
edgecolor = 'none',