如何从matplotlib图中提取数据

30 投票
7 回答
40090 浏览
提问于 2025-04-17 10:41

我有一个 wxPython 程序,它可以从不同的数据集中读取数据,进行一些简单的实时分析,并将这些数据的各种组合绘制到 matplotlib 的画布上。我希望能有一个功能,可以把当前绘制的数据保存到文件里,以便以后进行更复杂的分析。

我的问题是:在 matplotlib 中,有没有什么方法可以访问当前在 matplotlib.Figure 中绘制的数据?

7 个回答

5

总结一下,供以后参考:

如果你使用 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 的列表(这是一个包含图形所有元素的基础类)。

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

运行这个代码后,你会看到两个输出 - 一个是图表,另一个是数据:

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

这里输入图片描述

你还可以分别获取 x 轴和 y 轴的数据。运行 line.get_xdata(),你会得到:

array([1, 2, 3])

而运行 line.get_ydata(),你会得到:

array([4, 5, 6])

注意: gca获取当前坐标轴 的意思。

39

Jakub说得对,修改Python脚本直接从数据源写出数据到图表中,这样做是我更喜欢的方式。不过,如果你确实需要从图表中提取数据,我觉得下面的方法可以实现这个目的。

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

另外,你也可以单独获取x和y的数据集:

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

撰写回答