2016-03-28 56 views
11

當我從ipython shell或ipython筆記本運行文件時,通常會顯示圖,但是當我從bash終端運行文件時,不會顯示圖 - - 從bash終端運行時,其他一切正常工作。從bash終端運行文件時,不會顯示Matplotlib圖

樣品python腳本(trial.py):

import matplotlib.pyplot as plt 

print 'please, show my graph' 

plt.plot([1,2,3], [1,2,3]) 

plt.show() 

這是我得到的(情節不顯示):

[~/Desktop]$ python trial.py 
please, show my graph 
[~/Desktop]$ 

如果我做

import matplotlib 
matplotlib.use('TkAgg') 

在導入pyplot之前,當我從終端運行它時,會立即打開和關閉一個窗口。

我試圖導入模塊沒有成功不同的方式:

import matplotlib.pyplot as plt 
import matplotlib.pylab as plt 
from matplotlib import pyplot as plt 
from matplotlib import pylab as plt 

我有plt.show()函數在我的文件。

你知道我該如何修復它嗎?

有關版本和安裝的一些信息:在MAC OSX 10.11.3

我。

In [61]: print matplotlib.__file__ 
/usr/local/lib/python2.7/site-packages/matplotlib/__init__.pyc 

In [62]: print matplotlib.__version__ 
1.4.2 

In [64]: print sys.version 
2.7.9 (default, Apr 7 2015, 07:58:25) 
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.57)] 

In [65]: matplotlib.get_backend() 
Out[65]: u'MacOSX' 
+1

你能否提供一個不輸出任何內容的示例完整腳本?就像'import matplotlib.pyplot as plt'一樣簡單; plt.plot([1,2,3],[1,2,3]); plt.show()'。另外,你使用了什麼matplotlib後端? – wflynny

+0

謝謝@wflynny。 matplotlib.get_backend()輸出u'MacOSX'。該代碼根本不顯示任何內容。 – drake

+1

嘗試'plt.show(block = True)'只是爲了在顯示之後顯式地阻止代碼。您的編輯似乎表明該窗口不會阻止代碼,所以這可能會有所幫助。如果有效,我會編輯我的答案。另外,只需確認'plt.show()'是代碼中的最後一行,對吧? – Munir

回答

23

您需要在代碼中添加matplotlib.pyplot.show()才能以非交互模式顯示圖。見文檔在http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.show

編輯:

後從OP進一步信息,阻斷了使用plt.show(block=True)明確啓用。

+0

謝謝。我有這個。我編輯了我的問題以包含一些其他信息。 – drake

+0

這是一個相關的問題http://stackoverflow.com/questions/36274351/how-does-one-set-keyword-block-in-plt-show-equal-to-true-by-default。我想在默認情況下將該關鍵字設置爲True,這樣我就可以在不顯示「block = True」的情況下運行腳本。 – drake

相關問題