2009-12-21 7 views
7

Я хочу динамически обновлять график рассеяния на основе данных оси y, полученных от соединения сокета. Я использовал python matplot lib в интерактивном режиме для этого, но при динамическом обновлении, если я переместил окно в другое место или скрою окно, то обновление сюжета резко прекратится. Как это сделать?Интерактивный режим в matplotlib

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

import matplotlib.pyplot as plt 
import random 
import time 
items = [25.5,26.7,23.4,22.5,20,13.4,15.6,-12,-16,20] 
x = [1,2,3,4,5,6,7,8,9,10] 

plt.ion() # Interactive on 

for i in range(1,100): 
    plt.title('graph plotting') 
    plt.ylabel('temperature') 
    plt.xlabel('time') 
    random.shuffle(items) 
    plt.plot(x,items,'ob-') 
    plt.axis([0, 10, -40, 40]) 
    plt.draw() 
    #time.sleep(2) 
    plt.clf() 
    plt.close() 

ответ

1

Для этого, чтобы работать, вы должны иметь основной цикл для обработки событий, а также своего собственного обработчик события перерисовки сюжета при изменении размера окна или обновления.

Вы найдете много примеров для этого в Интернете или в учебниках.

Я думаю, что это лучше всего использовать с помощью инструментария UI (например, wxPython), не используя интерактивный режим matplotlib. У меня было a similar question в прошлом и получил хорошие ответы.

+0

Спасибо за ответ, я искал примеры обработки событий, но не смог найти его (я новичок на python), можете ли вы отправить мне ссылку на хотя бы один такой пример. – Sharath

+0

@Sharath: Вы найдете ссылки в ответе, с которым я связан. – Ber

+0

@Ber: Я имел в виду обработку событий в примерах matplot, а не wxPython, например, каковы события, которые я получаю для минимизации окна, перемещение в другое место и т. Д. Спасибо заранее – Sharath

3

This page содержит несколько примеров динамических участков с matplotlib и wxPython. И here - это версия с PyQt.

Смежные вопросы