LINUX.ORG.RU

[py]matplotlib show()?


0

0

есть код вида

.... #график данных
show()

Nstart=int(input(u'Enter start point:')); Nend = int(input(u'Enter end point:')) #ввести область анализа

... #результаты анализа в области Nstart:Nend
show()

первый график выводит, а второй выводит и сразу закрывает, как сделать правильно?

★★★★★

Последнее исправление: thunar (всего исправлений: 2)

Попробуй так

#!/usr/bin/env python

import numpy as np import matplotlib.pyplot as plt

dt = 0.001 t = np.arange(-1.0, 1.0, dt)

sin = np.sin(2*np.pi*t) cos = np.cos(2*np.pi*t)

plt.figure(1) plt.plot(t, sin, 'b-') #plt.xlim(-1,1) plt.xlabel('time') plt.ylabel('s(t)') plt.grid(True)

plt.figure(2) plt.plot(t, cos, 'r-') #plt.xlim(-1,1) plt.xlabel('time') plt.ylabel('s(t)') plt.grid(True)

plt.show()

anonymous
()
Ответ на: Попробуй так от anonymous

Пардон, так

#!/usr/bin/env python

import numpy as np import matplotlib.pyplot as plt

dt = 0.001

t = np.arange(-1.0, 1.0, dt)

sin = np.sin(2*np.pi*t)

cos = np.cos(2*np.pi*t)

plt.figure(1)

plt.plot(t, sin, 'b-')

#plt.xlim(-1,1)

plt.xlabel('time')

plt.ylabel('s(t)')

plt.grid(True)

plt.figure(2)

plt.plot(t, cos, 'r-')

#plt.xlim(-1,1)

plt.xlabel('time')

plt.ylabel('s(t)')

plt.grid(True)

plt.show()

anonymous
()
Ответ на: Пардон, так от anonymous

так то выводит, но если я сделаю 2 show последовательно для каждой фигуры — то нет, а надо именно 2

thunar ★★★★★
() автор топика
Ответ на: комментарий от anonymous

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

thunar ★★★★★
() автор топика

Это баг matplotlib. Разрабы отмазываются, что библиотека лучше работает в интерактивном режиме консоли. В итоге решения не существует без костылей.
Я в учебном проекте запускал внешний сгенерированный скрипт, который показывал график.

jreznot
()
Ответ на: комментарий от thunar

Скрипт слишком завязан на проект, но вкратце делаем так:
1) Пишем универсальную показывалку научных данных, которая запускается с путём к файлу, в котором лежат координаты точек/данные и тд.
2) В основном скрипте генерируем файл данных
3) Дёргаем показывалку графика
4) Profit!!!
--
Если надумаешь попробовать исхитриться с потоками, лучше не надо. Глобальные переменные на всю либу одни у них, и получишь тоже самое, что и сейчас.

jreznot
()
Ответ на: комментарий от arhibot

их там так много, какой именно?

thunar ★★★★★
() автор топика
Ответ на: комментарий от thunar

Можно сделать так:

Fig = plt.figure()

plt.plot(«what you want»)

Fig.show()

WhatYouWant = raw_input()

Fig1 = plt.figure()

plt.plot(«what you want»)

Fig1.show()

raw_input()

EVP
()
Ответ на: комментарий от thunar

Проблема: при первом запуске show() создаётся главное окно gtk/tk/qt, к которому всё остальное привязывается
Супер решение: переписать биндинг для правильной работы с перезапуском show()
Посмотри в гугле, там проблем с show() у всех много

jreznot
()
Ответ на: комментарий от jreznot

>при первом запуске show() создаётся главное окно gtk/tk/qt, к которому >всё остальное привязывается

show() прорисовывает все окна и сваливаетя в вечный цикл. Вызов show() для конкретного окна просто его прорисовывает, и программа выполняется дальше. Правда до завершения работы это окно должно быть закрыто либо вручную, либо Fig.close()

EVP
()
Ответ на: комментарий от EVP

Блин, там show() не для окна, там в этой функции у них куча заморочек помимо показа окна

jreznot
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.