如何从matplotlib图中提取数据
我有一个 wxPython
程序,它可以从不同的数据集中读取数据,进行一些简单的实时分析,并将这些数据的各种组合绘制到 matplotlib
的画布上。我希望能有一个功能,可以把当前绘制的数据保存到文件里,以便以后进行更复杂的分析。
我的问题是:在 matplotlib
中,有没有什么方法可以访问当前在 matplotlib.Figure
中绘制的数据?
7 个回答
总结一下,供以后参考:
如果你使用 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
的列表(这是一个包含图形所有元素的基础类)。
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
是 获取当前坐标轴 的意思。
Jakub说得对,修改Python脚本直接从数据源写出数据到图表中,这样做是我更喜欢的方式。不过,如果你确实需要从图表中提取数据,我觉得下面的方法可以实现这个目的。
gca().get_lines()[n].get_xydata()
另外,你也可以单独获取x和y的数据集:
line = gca().get_lines()[n]
xd = line.get_xdata()
yd = line.get_ydata()