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()
6条答案
按热度按时间vuktfyat1#
Jakub正确地修改了Python脚本,直接从数据源中写出数据,并将其发送到图中;这是我更喜欢的方法。但作为参考,如果你确实需要从图中获取数据,我认为这应该可以做到
或者,您可以单独获取x和y数据集:
hfyxw5xn2#
**
matplotlib.pyplot.gca
**可以用来从matplotlib图中提取数据。下面是一个简单的例子:运行此命令时,您将看到2个输出-图和数据:
您也可以单独获取x数据和y数据。运行
line.get_xdata()
时,您将获得:如果运行
line.get_ydata()
,您将得到:注:
gca
表示 * 获取当前轴 *s4n0splo3#
总结一下,供今后参考:
如果使用
plt.plot()
或plt.stem()
或plt.step()
打印,则可以使用以下命令获取Line2D对象的列表:对于
plt.pie()
、plt.bar()
或plt.barh()
,您可以获得楔形或矩形对象的列表:然后,根据情况,您可以通过运行
get_xdata()
,get_ydata()
(参见Line2D)获取数据以获取更多信息。或如
get_height()
的条形图(见矩形)了解更多信息。一般来说,对于所有基本绘图函数,您可以通过运行ax.get_children()来找到您要查找的内容
它返回一个子类
Artists
的列表(基类包括图中的所有元素)。rlcwz9us4#
它是Python,因此您可以直接修改源脚本,以便在绘制数据之前转储数据
fquxozlt5#
我知道这是一个老问题,但我觉得有一个解决方案比这里提供的更好,所以我决定写这个答案。
您可以使用
unittest.mock.patch
临时替换matplotlib.axes.Axes.plot
函数:退出
with
块后,Axes.plot
将恢复正常行为。t5fffqht6#
正如@mobiuscreek在回答中指出的那样,从axis中提取数据的方式取决于用于绘图的函数:例如,
ax.get_lines()
将适用于通过ax.plot()
创建的绘图,但如果线是使用matplotlib.collections.LineCollection
创建的,则它会给出空数组。(当图形由第三方代码创建时,可能会出现更多问题。)一般的方法是使用
ax.get_children()
并根据需要解析它。例如,参见this answer。