import matplotlib
import matplotlib.pyplot as plt
matplotlib是很高效的可視化工具包,pycharm的SciView模式可以緩存上一次plot的圖像,因此能夠同時顯示多張圖像,如下圖1所示,相較於跳出獨立窗口的顯示方式,
圖1
SciView更靈活。SciView的配置方式為圖2所示:
圖2
==============================================================================================================================
Pycharm運行本地解釋器,檢查matplotlib.get_backend(),
>>matplotlib.get_backend()
'module://backend_interagg'
backend_interagg就能很好地兼容pycharm的SciView,
plt.show() 后可以SciView可以正常顯示圖像,如圖1,然而運行遠程解釋器(Remote Server Debug)時,會遇到問題。例如
----------------------------------------------------------------------------------------------------------------------------------------------
問題1:
>>plt.show()
Error: failed to send plot to http://127.0.0.1:63342
Traceback (most recent call last):
File "/lustre/home/dlyu/.app/Python-3.6.4rc1/lib/python3.6/urllib/request.py", line 1318, in do_open
........
ConnectionRefusedError: [Errno 111] Connection refused
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/lustre/home/dlyu/.pycharm_helpers/pycharm_display/datalore/display/display_.py", line 60, in _send_display_message
urlopen(url, buffer)
urllib.error.URLError: <urlopen error [Errno 111] Connection refused>
.....
----------------------------------------------------------------------------------------------------------------------------------------------
問題2:或者壓根不報錯,就是不顯示圖像。我把Pycharm重裝最新版本后,不出現問題2,而是變為問題1了。
----------------------------------------------------------------------------------------------------------------------------------------------
在“http://127.0.0.1:63342”中的63342是環境變量os.environ['PYCHARM_DISPLAY_PORT']或者os.getenv("PYCHARM_MATPLOTLIB_PORT")。 遠程解釋器嘗試將圖像數據發送到 遠程服務器的127.0.0.1 : 63342 ,然而Connection refused。SciView的運行機制是:本地筆記本的Pycharm會偵聽127.0.0.1:63342 ,遠程解釋器會將圖像數據發送到127.0.0.1 : 63342,因此在Pycharm收到圖像數據后,會在SciView中顯示。
為了解決以上Connection refused問題,ssh遠程端口轉發可以建立起遠程server127.0.0.1 : 63342 和 本機筆記本127.0.0.1:63342 之間的channel。
在本地筆記本上運行 ssh -R 63342:127.0.0.1:63342 user@serverIP , 在運行plt.plot() 以及 plt.show() ,SciView能夠顯示圖像。
解決方法參考https://youtrack.jetbrains.com/issue/PY-27489