如何从matplotlib图中提取数据

时间:2012-01-20 08:15:42

标签: python matplotlib

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

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

5 个答案:

答案 0 :(得分:22)

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

gca().get_lines()[n].get_xydata()

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

line = gca().get_lines()[n]
xd = line.get_xdata()
yd = line.get_ydata()

答案 1 :(得分:1)

它的Python,因此您可以直接修改源脚本,以便在绘制数据之前将其转储

答案 2 :(得分:0)

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()

运行此命令时,您将看到2个输出-图形和数据:

array([[1., 4.],
   [2., 5.],
   [3., 6.]])

enter image description here

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

array([1, 2, 3])

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

array([4, 5, 6])

注意: gca代表获取当前轴

答案 3 :(得分:0)

我知道这是一个老问题,但是我觉得有比这里提供的解决方案更好的解决方案,所以我决定写这个答案。

您可以使用unittest.mock.patch临时替换matplotlib.axes.Axes.plot函数:

from unittest.mock import patch

def save_data(self, *args, **kwargs):
    # save the data that was passed into the plot function
    print(args)

with patch('matplotlib.axes.Axes.plot', new=save_data):
    # some code that will eventually plot data
    a_function_that_plots()

退出with块后,Axes.plot将恢复正常行为。

答案 4 :(得分:0)

总结一下,供以后参考:

如果使用 plt.plot()plt.stem()plt.step() 绘图,您可以获得 Line2D 对象的列表:

ax = plt.gca() # to get the axis
ax.get_lines()

对于 plt.pie()plt.bar()plt.barh(),您可以获得楔形或矩形对象的列表:

ax = plt.gca() # to get the axis
ax.patches()

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

或即 get_height() 用于条形图(请参阅 Rectangle)了解更多信息。

一般来说,对于所有基本绘图函数,您可以通过运行 ax.get_children()

找到您要查找的内容

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