我想绘制一条宽度在数据单元中指定的线.在这种情况下,干脆做
plot(x, y, linewidth=1)
Run Code Online (Sandbox Code Playgroud)
会失败,因为linewidth数据单元中没有指定.
为此,我找到了fill_between(),但我发现这里给出的所有例子都是格式
fill_between(x, y1, y2)
Run Code Online (Sandbox Code Playgroud)
这意味着,x总是由y1和共享y2.
那么如果y1和y2不共享x呢?
例如,我希望填充line1=[(0, 0), (2, 2)]和line2=[(-1, 1), (1, 3)](基本上,它们形成一个矩形).在这种情况下,我想要类似的东西
fill_between(x1, x2, y1, y2)
Run Code Online (Sandbox Code Playgroud)
显然,它没有按预期工作:
In [132]: x1 = [0,2]
.....: x2 = [-1, 1]
.....: y1 = [0,2]
.....: y2 = [1,3]
.....: fill_between(x1, x2, y1, y2)
.....:
Out[132]: <matplotlib.collections.PolyCollection at 0x3e5b230>
Run Code Online (Sandbox Code Playgroud)

在这种情况下我该如何策划?
更简单, matplotlib.patches.Rectangle
rect = matplotlib.patches.Rectangle((.25, .25), .25, .5, angle=45)
plt.gca().add_patch(rect)
plt.draw()
Run Code Online (Sandbox Code Playgroud)
好问题!我建议你不要限制自己的功能fill_between。我始终认为深入了解事物是有益的。让我们深入探讨 Python 绘图的本质。
所有对象的底层对象matplotlib.patch是Path.
所以,如果你掌握了Path,你基本上可以用任何方式画出任何你喜欢的东西。现在让我们看看如何通过神奇的Path.
要获得您在问题中提到的矩形,只需对示例进行一些调整即可。
import matplotlib.pyplot as plt
from matplotlib.path import Path
import matplotlib.patches as patches
verts = [(0., 0.), # left, bottom
(-1., 1.), # left, top
(1., 3.), # right, top
(2., 2.), # right, bottom
(0., 0.),] # ignored
codes = [Path.MOVETO,
Path.LINETO,
Path.LINETO,
Path.LINETO,
Path.CLOSEPOLY,]
path = Path(verts, codes)
fig = plt.figure()
ax = fig.add_subplot(111)
patch = patches.PathPatch(path, facecolor='orange', lw=2)
ax.add_patch(patch)
ax.axis('equal')
plt.show()
Run Code Online (Sandbox Code Playgroud)
我认为代码非常简单且不言自明,我不需要在上面浪费我的言语。只需复制、粘贴并运行它,您就会得到这个,正是您想要的。
