2014-01-21 6 views
0

У меня есть сюжет с использованием matplotlib, который обновляется каждую секунду. Он предназначен только для медленного мониторинга, поэтому я следил за простым подходом к очистке и рисованию снова и снова, что не является оптимальным, но я хотел простоту.Невозможно изменить размер окна matplotlib

my_fig = plt.figure() 
ax1 = plt.subplot(111) 
plt.show(block=False) 

while True: 

    data = read_data_and_process(...) 

    ax1.plot_date(data[0], data[1], '-')   
    my_fig.autofmt_xdate() 

    plt.draw() 
    time.sleep(1) 
    ax1.cla() 

Это работает, но если я изменю размер окна, сюжет не изменит его размер. Если я сюжет данных без обновления, я могу изменить размер окна и сюжет изменяет соответствующим образом:

my_fig = plt.figure() 
ax1 = plt.subplot(111)  

data = read_data_and_process(...)   
ax1.plot_date(data[0], data[1], '-')   
my_fig.autofmt_xdate()   
plt.show(block=True) 

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

Спасибо!

ответ

1

Когда я пытаюсь выполнить этот код, я не могу даже захватить окно, чтобы изменить его размер, потому что цикл событий блейд-сервера matplotlib застрял. Я бы предложил посмотреть на Animation API на matplotlib (см. examples).

Однако, это быстрый хак, чтобы заставить ваш пример работать, заставляя сервер Qt.

import matplotlib 
matplotlib.use('QT4Agg') 
from matplotlib import pyplot as plt 
from PyQt4 import QtCore,QtGui 
import time 

# The rest of your code as normal 

    # then at the bottom of the while loop 
    plt.draw() 
    QtGui.qApp.processEvents() 
    time.sleep(1) 
    ax1.cla() 

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

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