Обновить/обновить графики matplotlib на втором мониторе

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

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

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

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

ОС: Ubuntu 14.04 (64-разрядная версия) Версия Spyder: 2.3.2 Версия Matplotlib: 1.3.1.-1.4.2.


person Cord Kaldemeyer    schedule 09.01.2015    source источник
comment
(Spyder dev здесь) Позвольте мне посмотреть, правильно ли я понимаю вашу проблему: вы повторно запускаете свои скрипты, которые генерируют графики matplotlib, а графики не обновляются на вашем втором мониторе? Другой вопрос: какая у вас операционная система и версии Spyder, matplotlib и Python? Спасибо :-)   -  person Carlos Cordoba    schedule 09.01.2015
comment
Да, если я повторно запускаю сценарий (с максимальным отображением графика первого запуска на моем втором мониторе), новый график открывается и размещается на моем первом мониторе. Я работаю под Ubuntu 14.04 (64-разрядная версия) со Spyder 2.3.2 и matplotlib 1.3.1. Спасибо за вашу помощь!   -  person Cord Kaldemeyer    schedule 09.01.2015
comment
Кажется, это проблема с matplotlib, а не со Spyder. Возможно, вам поможет обновление до matplotlib 1.4.2. Извините, что больше ничем не помог.   -  person Carlos Cordoba    schedule 09.01.2015
comment
Сейчас я обновился до matplotlib 1.4.2. и все еще есть та же проблема .. Спасибо в любом случае!   -  person Cord Kaldemeyer    schedule 09.01.2015
comment
Попробуйте опубликовать проблему в системе отслеживания ошибок. Может быть, ребята из mpl смогут вам помочь :-)   -  person Carlos Cordoba    schedule 09.01.2015
comment
Вы используете интерфейс pyplot или фактические методы объекта? Pyplot стремится заменить цифры...   -  person Ajean    schedule 09.01.2015
comment
Что вы подразумеваете под обновлением их с основного монитора?   -  person HelloGoodbye    schedule 27.09.2017


Ответы (2)


Это связано с matplotlib, а не со Spyder. Явное размещение местоположения фигуры кажется одной из тех вещей, для которых действительно есть обходные пути... см. ответы на вопрос здесь. Это старый вопрос, но я не уверен, что с тех пор что-то изменилось (любые разработчики 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()
person Ajean    schedule 09.01.2015
comment
Спасибо за Ваш ответ! Ваш код работает отлично, но на самом деле это не то, что я искал. Может быть, это было из-за того, что моя формулировка была немного неясной. Для меня важно, чтобы окно графика оставалось на втором мониторе и сохраняло его положение, если я повторно запускаю свой код с командами построения. - person Cord Kaldemeyer; 12.01.2015
comment
После обновления до matplotlib 1.4.2 все новые графики так или иначе помнят монитор последнего графика. Поэтому для моей цели мне нужно было только убедиться, что позиция такая же, которую я решил, развернув окно с кодом из этого вопроса (stackoverflow.com/questions/12439588/) В любом случае, спасибо за ваш ответ! В следующий раз постараюсь выражаться яснее ;) - person Cord Kaldemeyer; 12.01.2015

Я знаю, что это старый вопрос, но я столкнулся с похожей проблемой и нашел этот вопрос. Мне удалось перенести свои графики на второй дисплей с помощью бэкэнда 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: Как установить абсолютную позицию окон рисунков с помощью matplotlib?

person Maecky    schedule 04.03.2016