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

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

Можно ли как-то разместить графики Matplotlib на втором мониторе и обновить их с основного монитора?

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

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

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

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()

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

Другие вопросы по тегам