2015-01-09 72 views
3

目前我正在使用Spyder並使用matplotlib進行繪圖。我有兩臺顯示器,一臺用於開發,另一臺用於(數據)瀏覽和其他內容。由於我正在做一些計算,並且我的代碼經常發生變化,所以我經常(重新)執行代碼並查看圖來檢查結果是否有效。更新/刷新第二臺顯示器上的matplotlib圖

有什麼辦法可以將我的matplotlib圖放置在第二臺顯示器上並從主顯示器中刷新它們嗎?

我已經搜索了一個解決方案,但找不到任何東西。這對我真的很有幫助!

這裏有一些額外的信息:

操作系統:Ubuntu的14.04(64位) Spyder的-版本:2.3.2 Matplotlib-版本:1.3.1.-1.4.2。

+0

(*這裏的Spyder開發*)讓我看看,如果我正確地理解您的問題:你重新運行腳本,產生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?

相關問題