Как извлечь данные из сюжета matplotlib - PullRequest
15 голосов
/ 20 января 2012

У меня есть программа wxPython, которая читает из разных наборов данных, выполняет различные виды простого оперативного анализа данных и отображает различные комбинации наборов данных на matplotlib canvas. Я хотел бы иметь возможность выгружать текущие данные в файл для более сложного анализа позже.

Вопрос в том, есть ли в matplotlib какие-либо методы, позволяющие получить доступ к данным, которые в настоящее время отображаются в matplotlib.Figure?

Ответы [ 4 ]

22 голосов
/ 20 января 2012

Якуб прав в том, что касается модификации скрипта Python для записи данных непосредственно из источника, из которого они были отправлены в график; именно так я бы предпочел сделать это. Но для справки, если вам нужно получить данные из графика, я думаю, что это должно сделать это

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

В качестве альтернативы вы можете получить наборы данных x и y отдельно:

line = gca().get_lines()[n]
xd = line.get_xdata()
yd = line.get_ydata()
1 голос
/ 20 января 2012

Это Python, так что вы можете изменить исходный сценарий напрямую, чтобы данные выводились до их построения

0 голосов
/ 04 января 2019

Я знаю, что это старый вопрос, но я чувствую, что есть решение лучше, чем предложенные здесь, поэтому я решил написать этот ответ.

Вы можете использовать unittest.mock.patch для временной замены matplotlib.axes.Axes.plot function:

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 возобновит нормальное поведение.

0 голосов
/ 20 ноября 2018

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обозначает получить текущую ось

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...