Есть ли удобный способ перерисовки построенного графика живых данных (matlibplot, python2.7)? - PullRequest
0 голосов
/ 06 февраля 2019

Я получаю кучу живых данных с микрофонов.Длина набора данных составляет 4000, и я получаю его 5 раз в секунду.

Я использую python2.7 и matplotlib.Чтобы получить представление о наборах данных:

Если он тихий

[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, -1, -1, -1, -2, 0, -1, 0, 0, 0, -1, 1, -2, 0, -2, -2, -8, -1, -1, 0, -2, -1, -2, -1, -1, -1, 0, -1, 0, -1, 0, -1, -1, -1, -1, -1, 0, -1, 0, -1, -1, 0, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, -1,-1, 0, -1, -4, -1, 0, -1, 2, -1, 0, 2, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, ...]

Если он громкий:

[-372, -37, -157, -143, 93, -212, 304, -225, 432, -177, 450, -79, 351, 40, 159, 147, -77, 213, -296, 222, -440, 173, -467, 77, -366, -41, -161, -147, 90, -215, 308, -225, 435, -175, 446, -77, 351, 42, 167, 147, -70, 210, -296,  -166, 456, -76, 374, 34, ...]

Мой скрипт на Python:

def plot_data(data):
    x = [i for i in range(0, 4000)]
    plt.plot(x,data.data)
    plt.show()

def listener():
    rospy.init_node('listener', anonymous=True)
    rospy.Subscriber('/miro/rob01/platform/mics', platform_mics, show_data)
    rospy.spin()

if __name__ == '__main__':
    listener()

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

График должен выглядеть следующим образом: enter image description here

Знаете ли вы хороший способ сделать это?

1 Ответ

0 голосов
/ 07 февраля 2019

Одной вещью, которая может работать, является анимация функциональность, предоставляемая matplotlib.У них есть примеров .Я думаю этот пример выглядит как простое место для начала.По сути, вместо того, чтобы каждый раз заново составлять график, вы обновляете данные объекта Line2D .Я не пробовал это с обратными вызовами ROS, поэтому не могу сказать, насколько хорошо это будет работать в вашем случае использования.

Я бы действительно предложил вам использовать rqt_plot , если выуже использую ROS.Он предназначен именно для того, что вам нужно, в режиме реального времени для отображения данных, поступающих по темам, и вы можете использовать matplotlib в качестве бэкэнда для построения графиков (хотя я думаю, что они используют pyqtgraph по умолчанию, что имеет некоторые преимущества в скорости).Это даже не то, для чего вы должны писать код, это просто вызов командной строки

rqt_plot

, и появится графический интерфейс, который позволит вам указать тему, которую вы хотите визуализировать.

В качестве последнего предложения, если у вас есть несколько тем, которые вы хотите построить, я нашел Plot Juggler как более хорошую альтернативу, и у него есть дополнительное преимущество: вы можете использовать его вне ROS, а также визуализироватьданные загружаются статически из файлов.

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