0

Я пытаюсь сделать так, чтобы я мог запускать бесконечный цикл, запрашивая ввод пользователя, а также простую диаграмму matplotlib. Любые предложения, как это может работать? В настоящее время у меня есть для моего кода:Matplotlib multiProcessing

def createGraph(): 
fig = plt.figure() 
fig.suptitle('A Graph ', fontsize=14, fontweight='bold') 

ax = fig.add_subplot(111) 
fig.subplots_adjust(top=.9) 

ax.set_xlabel('X Score') 
ax.set_ylabel('Y Score') 
plt.plot([1,2,3,4,5,6,7],[1,3,3,4,5,6,7], 'ro') 
plt.show() 

def sub_proc(q,fileno): 
sys.stdin = os.fdopen(fileno) #open stdin in this process 
some_str = "" 
while True: 
    some_str = raw_input("> ") 

    if some_str.lower() == "quit": 
     return 
    q.put_nowait(some_str) 

if __name__ == "__main__": 
    q = Queue() 
    fn = sys.stdin.fileno() #get original file descriptor 
    qproc = Process(target=sub_proc, args=(q,fn)) 
    qproc.start() 
    qproc.join() 
    zproc = Process(target=createGraph) 
    zproc.start() 
    zproc.join() 

Как вы видите, я пытаюсь получить процессы, чтобы получить эту работу, так что код работает параллельно. В конечном счете, я хотел бы получить его так, чтобы пользователь мог отображать график и в то же время мог входить в консоль. Спасибо за любую помощь!

+0

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

+0

Спасибо tcaswell, не могли бы вы связать меня с чем-то, что помогло бы мне в рамках gui? Я как бы изо всех сил пытаюсь выяснить, как это сделать – modred

+0

http://matplotlib.org/examples/user_interfaces/ – tacaswell

ответ

0

Это то, что вы хотите?

import matplotlib.pyplot as plt 
import numpy as np 

if __name__ == "__main__": 
    fig, ax = plt.subplots(1, 1) 
    theta = np.linspace(0, 2*np.pi, 1024) 
    ln, = ax.plot(theta, np.sin(theta)) 

    plt.ion() 
    plt.show(block=False) 
    while True: 
     w = raw_input("enter omega: ") 
     try: 
      w = float(w) 
     except ValueError: 
      print "you did not enter a valid float, try again" 
      continue 
     y = np.sin(w * theta) 
     ln.set_ydata(y) 
     plt.draw() 

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

+0

Да, это потрясающе, за исключением одного. Кажется, что, хотя вы можете вводить с консоли, что очень приятно, так как сам график заморожен. Есть ли способ разрешить это? Я хотел бы, чтобы пользователь мог передвигаться и писать на моих графиках. – modred

+0

Что значит «замороженный»? Для меня масштабирование, панорамирование и различные виджеты редактирования графиков работают должным образом. – tacaswell

+0

Я получаю вращающееся колесо всякий раз, когда я наводил курсор на график, поэтому я не могу взаимодействовать с графиком. – modred