如何从matplotlib图中提取数据

And*_*lev 17 python matplotlib

我有一个wxPython从不同数据集读取的程序,对数据执行各种类型的简单动态分析,并绘制数据集到matplotlib画布的各种组合.我希望有机会将当前绘制的数据转储到文件中,以便稍后进行更复杂的分析.

问题是:是否有任何方法matplotlib可以访问当前绘制的数据matplotlib.Figure

Dav*_*d Z 25

Jakub正确地修改Python脚本以直接从发送到绘图的源中写出数据; 这就是我喜欢这样做的方式.但作为参考,如果你确实需要从一个情节中获取数据,我认为应该这样做

gca().get_lines()[n].get_xydata()
Run Code Online (Sandbox Code Playgroud)

或者,您可以单独获取x和y数据集:

line = gca().get_lines()[n]
xd = line.get_xdata()
yd = line.get_ydata()
Run Code Online (Sandbox Code Playgroud)


Ste*_*i J 9

matplotlib.pyplot.gca用于从 matplotlib 图中提取数据。这是一个简单的例子:

import matplotlib.pyplot as plt
plt.plot([1,2,3],[4,5,6])
ax = plt.gca()
line = ax.lines[0]
line.get_xydata()
Run Code Online (Sandbox Code Playgroud)

运行此程序时,您将看到 2 个输出 - 绘图和数据:

array([[1., 4.],
   [2., 5.],
   [3., 6.]])
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

您还可以分别获取 x 数据和 y 数据。运行时line.get_xdata(),您将得到:

array([1, 2, 3])
Run Code Online (Sandbox Code Playgroud)

运行时line.get_ydata(),您将得到:

array([4, 5, 6])
Run Code Online (Sandbox Code Playgroud)

注: gca代表获取当前轴


mob*_*eek 5

总结一下,供以后参考:

如果使用plt.plot()plt.stem()或进行绘图plt.step(),您可以使用以下命令获取 Line2D 对象的列表:

ax = plt.gca() # to get the axis
ax.get_lines()
Run Code Online (Sandbox Code Playgroud)

对于plt.pie()plt.bar()或者plt.barh()您可以通过以下方式获取楔形或矩形对象的列表:

ax = plt.gca() # to get the axis
ax.patches()
Run Code Online (Sandbox Code Playgroud)

然后,根据情况,您可以通过运行来获取数据get_xdata()get_ydata()(请参阅Line2D)以获取更多信息。

或者 ieget_height()获取条形图(请参阅矩形)以获取更多信息。

一般来说,对于所有基本绘图函数,您可以通过运行ax.get_children()找到您要查找的内容

返回子级列表Artists(基类包括图形的所有元素)。