2015-01-09 9 views
3

На данный момент я работаю со Spyder и делаю свой заговор с помощью matplotlib. У меня есть два монитора, один для разработки и другой для (данных) просмотра и других вещей. Поскольку я выполняю некоторые вычисления, и мой код часто изменяется, я часто (повторно) выполняю код и просматриваю графики, чтобы проверить, являются ли результаты действительными.Обновить/Обновить графики matplotlib на втором мониторе

Есть ли способ разместить мои графики matplotlib на втором мониторе и обновить их с основного монитора?

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

Вот некоторая дополнительная информация:

ОС: Ubuntu 14.04 (64 Bit) Spyder-Version: 2.3.2 Matplotlib-Version: 1.3.1.-1.4.2.

+0

(* Spyder DEV здесь *) Позвольте мне увидеть, если я понимаю вашу проблему правильно: вы повторно запускать скрипты, которые генерируют Matplotlib участки, и графики не обновляются на вашем втором мониторе? Другой вопрос: Какова ваша операционная система и версии Spyder, matplotlib и Python? Спасибо :-) –

+0

Да, если я заново запустил сценарий (на первом мониторе был показан график первого запуска), новый график открывается и помещается на мой первый монитор. Я работаю под Ubuntu 14.04 (64 бит) с Spyder 2.3.2 и matplotlib 1.3.1 .. Спасибо за помощь! –

+0

Это похоже на проблему с matplotlib, а не с Spyder. Возможно, вам поможет обновление до matplotlib 1.4.2. Извините за то, что вы больше не помогаете. –

ответ

2

Это связано с matplotlib, а не с Spyder. Размещение местоположения фигуры явно является одной из тех вещей, для которых действительно существуют обходные пути ... см. Ответы на вопрос here. Это старый вопрос, но я не уверен, что с тех пор произошли изменения (любые разработчики matplotlib, не стесняйтесь исправлять меня!).

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

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

import matplotlib.pyplot as plt 
import numpy as np 

# Create the figure and axes, keeping the object references 
fig = plt.figure() 
ax = fig.add_subplot(111) 

p, = ax.plot(np.linspace(0,1)) 

# First display 
plt.show() 

# Some time to let you look at the result and move/resize the figure 
plt.pause(3) 

# Replace the contents of the Axes without making a new window 
ax.cla() 
p, = ax.plot(2*np.linspace(0,1)**2) 

# Since the figure is shown already, use draw() to update the display 
plt.draw() 
plt.pause(3) 

# Or you can get really fancy and simply replace the data in the plot 
p.set_data(np.linspace(-1,1), 10*np.linspace(-1,1)**3) 
ax.set_xlim(-1,1) 
ax.set_ylim(-1,1) 

plt.draw() 
+0

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

+0

После обновления до matplotlib 1.4.2 все новые сюжеты как-то «помнят» монитор последнего сюжета. Поэтому для моей цели я только должен был убедиться, что позиция такая же, что я решил, максимизируя окно с кодом из этого вопроса (http://stackoverflow.com/questions/12439588/how-to-maximize-a-plt -show-window-using-python) В любом случае, спасибо за ваш ответ! В следующий раз я постараюсь выразить себя более четко;) –

0

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

import matplotlib.pyplot as plt 
plt.switch_backend('QT4Agg') 

# a little hack to get screen size; from here [1] 
mgr = plt.get_current_fig_manager() 
mgr.full_screen_toggle() 
py = mgr.canvas.height() 
px = mgr.canvas.width() 
mgr.window.close() 
# hack end 

x = [i for i in range(0,10)] 
plt.figure() 
plt.plot(x) 

figManager = plt.get_current_fig_manager() 
# if px=0, plot will display on 1st screen 
figManager.window.move(px, 0) 
figManager.window.showMaximized() 
figManager.window.setFocus() 

plt.show() 

[1] Ответ от @divenex: How do you set the absolute position of figure windows with matplotlib?

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

  • Нет связанных вопросов^_^