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'
不是一个选项),您可以通过增加创建图形时的figsize
和dpi
:
fig = plt.figure(figsize=(12,4), dpi=600)
如果 figsize
和 dpi
足够大,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',
我正在尝试使用 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'
不是一个选项),您可以通过增加创建图形时的figsize
和dpi
:
fig = plt.figure(figsize=(12,4), dpi=600)
如果 figsize
和 dpi
足够大,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',