从 fill_ Between 的 PolyCollection 中提取 x/y 数据

sup*_*gra 2 matplotlib

如何从绘图中生成的 PolyCollection 中提取 x/y 数据fill_between

polyCollection = ax.fill_between(x,ylo,yhi)
Run Code Online (Sandbox Code Playgroud)

现在我如何从 获取数据polyCollection

对于其他Collection对象,我使用x, y = artist.get_offsets().T,但这里由于某种原因仅返回零。

对于“Line”类型的对象,我使用x, y = artist.get_xdata(), artist.get_ydata().

(我在回调中使用此信息来本地自动缩放 y 轴,以适应特定 x 范围内的数据。)

Joh*_*anC 7

polyCollection.get_paths()给出路径列表. 在本例中是一个包含一个元素的列表。从那里你可以得到Nx2 numpy 数组形式的顶点,并且有xand y

from matplotlib import pyplot as plt
import numpy as np

N = 20
polyCollection = plt.fill_between(np.arange(0, N),
                                  5 + np.random.normal(size=N).cumsum(),
                                  10 + np.random.normal(size=N).cumsum(), color='lightblue', alpha=0.3)
points = polyCollection.get_paths()[0].vertices
xs = points[:, 0]
ys = points[:, 1]
plt.scatter(xs, ys, marker='o', color='crimson')
Run Code Online (Sandbox Code Playgroud)

结果图的示例