matplotlib 如何填充由两组不同数组定义的两条曲线?

disho6za  于 2023-11-22  发布在  其他
关注(0)|答案(2)|浏览(114)

我有两条由两组数组定义的曲线:(x1, y1)(x2, y2),我想用多边形填充它们之间。所有数组的长度都相同,但x1x2包含不同的值。
plt.fill_between(x, y1, y2)要求两条曲线共享相同的x数组。
我如何做类似fill_between(x1, y1, x2, y2)的事情?
例如,如果:
x1 = np.array([1.0, 2.0, 3.0, 4.0, 5.0])y1 = np.array([3.0, 2.0, 3.0, 2.0, 3.0])定义第一条曲线

x2 = np.array([1.5, 2.5 ,3.5 ,4.5 , 5.5])y2 = np.array([5.0, 6.0, 7.0, 8.0, 9.0])定义第二个。
如何使用四个多边形(左右边界不需要垂直)在曲线(x1, y1)(x2, y2)之间填充颜色?
为了澄清,四个多边形(A,B,C,D)将具有坐标:

A: [(1.0, 3.0), (1.5, 5.0), (2.5, 6.0), (2.0, 2.0)]
B: [(2.0, 2.0), (2.5, 6.0), (3.5, 7.0), (3.0, 3.0)]
C: [(3.0, 3.0), (3.5, 7.0), (4.5, 8.0), (4.0, 2.0)]
D: [(4.0, 2.0), (4.5, 8.0), (5.5, 9.0), (5.0, 3.0)]

字符串

idv4meu8

idv4meu81#

我很难清楚地解释你的问题,但我认为你只是想使用fill,比如:

import numpy as np
import matplotlib.pyplot as plt

x1 = np.array([1.0, 2.0, 3.0, 4.0, 5.0])
y1 = np.array([3.0, 2.0, 3.0, 2.0, 3.0])

x2 = np.array([1.5, 2.5, 3.5, 4.5, 5.5])
y2 = np.array([5.0, 6.0, 7.0, 8.0, 9.0])

plt.plot(x1, y1, 'o')
plt.plot(x2, y2, 'x')

plt.fill(
    np.append(x1, x2[::-1]),
    np.append(y1, y2[::-1]),
)

字符串
会给你给予


的数据

dgjrabp2

dgjrabp22#

你可以使用多边形面片绘制四边形填充两条曲线之间的空间-唯一棘手的问题是定义多边形的5个点的生成,但是(ab)使用zip可以完成..你还需要知道如何在图上放置多边形,但是当你知道matplotlib.collections.PatchCollectionax.add_collection时,这很容易

import numpy as np 
import matplotlib.pyplot as plt
from matplotlib.patches import Polygon
from matplotlib.collections import PatchCollection

x1 = np.linspace(0,6,21) ; y1 = np.sin(x1)
x2 = x1+0.28 ; y2 = np.cos(x2)

fig, ax = plt.subplots()                                                         
ax.plot(x1, y1, x2, y2)
patches = [Polygon(poly) for poly in (
              [p0,p1,p2,p3,p0] for p0,p1,p2,p3 in 
                    zip(zip(x1,y1),zip(x1[1:],y1[1:]),zip(x2[1:],y2[1:]),zip(x2,y2)))
ax.add_collection(PatchCollection(patches, alpha=0.6))

字符串
x1c 0d1x的数据
正如你所看到的,它并不完美,但也许它足够好了。

相关问题