我有一个wxPython
程序,它从不同的数据集中读取,对数据执行各种类型的简单动态分析,并将数据集的各种组合绘制到matplotlib
画布。我希望有机会将当前绘制的数据转储到文件中,以便稍后进行更复杂的分析。
问题是:matplotlib
中是否有任何方法可以访问matplotlib.Figure
中当前绘制的数据?
答案 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.]])
您还可以分别获取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
(基类,包括图形的所有元素)。