Обновление / обновление графиков 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?