å®å šã«æ°é®®ãªã³ã³ãç°å¢ãäœæãããšãïŒ
conda create --name test ipython matplotlib
次ã«ãipythonå
ããimport matplotlib.pyplot
ãè©ŠããŠã¿ããšã次ã®ããã«ãªããŸãã
In [1]: import matplotlib.pyplot
In [2]: QXcbConnection: Could not connect to display
Aborted
ããã©Pythonã·ã§ã«ã§åããã®ãå®è¡ããŠãåé¡ã¯ãããŸããã py2.7.13ïŒipython 5.3.0ïŒãšpy3.6.1ïŒipython 6.0.0ïŒã®äž¡æ¹ã§çºçããŸãã
ãããipythonã®ãã°ãªã®ãcondaã®ãã°ãªã®ãããããªãã®ã§ãæåã«anacondaã§åé¡ãæèµ·ããŸããããããã§ã泚æããããšæããŸãã
os.environ['DISPLAY']
ãIPythonãšããã©Pythonã·ã§ã«ã§åãã§ããããšã確èªã§ããŸããïŒ
matplotlibãå¥ã®ããã¯ãšã³ããéžæããŠããå¯èœæ§ããããšæããŸããããªããããªãã®ãã¯ããããŸããã
ããã§ã-ãã£ã¹ãã¬ã€ã®ãªãã¯ã©ã¹ã¿ãŒãããããŒãã§ãããå®è¡ããŠããããšãå¿ããŸããã ãããã£ãŠã$ DISPLAYã»ããã¯ãããŸããïŒ os.environ['DISPLAY']
ã¯äž¡æ¹ã®ã·ã§ã«ã§KeyError
ããŸãïŒã
ãŸããããã¯ãšã³ããæ瀺çã«'agg'
ã«èšå®ããå Žåããšã©ãŒã¯çºçããŸããããipythonãèµ·åããŠãmatplotlibãã€ã³ããŒããããã®ãã€ã³ããŒããããã³ã«ãšã©ãŒãçºçããã®ãé¿ããããšæããŸãã
Jupyterã€ã³ã¿ãŒãã§ãŒã¹ã®ã«ãŒãã«ãšããŠIPythonã¿ãŒããã«ã€ã³ã¿ãŒãã§ãŒã¹ãŸãã¯IPythonã䜿çšããŠããŸããïŒ ã«ãŒãã«ãšããŠã®IPythonã¯ãããã©ã«ãã§ã€ã³ã©ã€ã³ãããããçæããããã«MPLBACKEND
ç°å¢å€æ°ãèšå®ãããšæããŸãããã¿ãŒããã«ã®IPythonã§ã¯çºçããªãã¯ãã§ãã ãšã«ãããã€ã³ã©ã€ã³ããããã«ã¯XãµãŒããŒã¯å¿
èŠãªããšæããŸãã ïŒ-/
ç§ã¯ipythonã¿ãŒããã«ã€ã³ã¿ãŒãã§ãŒã¹ã䜿çšããŠããŸããã DISPLAY
ãå©çšã§ããªãå Žåãããã¯ãšã³ãã¯ããã©ã«ãã§ãããå¿
èŠãšããªããã®ã«ãªã£ãŠããã¯ãã§ãããããã¯èµ·ãã£ãŠããªãããã§ãã
@tacaswell IPythonãããã©ã«ãã®ããã¯ãšã³ãã«åœ±é¿ãäžããŠããçç±ã¯ãããŸããïŒ
ããã¯ãAnacondaã®Matplotlibã®ããã©ã«ãã®ããã¯ãšã³ããQt5ã§ããããã«çºçããŸãã ãã®çš®ã®åé¡ãåé¿ããããã«ãTkã«å€æŽããããšãæ€èšããŠããŸãã
Tkã«å€æŽããŠãåãåé¡ãçºçããŸãã
pyplotãIPythonå ã«ã€ã³ããŒãããããšãã€ãã³ãã«ãŒãçµ±åã«æ°ã¥ããã»ããã¢ãããããããIPythonãšPythonã§ããã«è¡šç€ºããããšæããŸãã ãã¬ãŒã³ããã³ããã§ã¯ããŠãŒã¶ãŒããããããäœæããããšãããšãæçµçã«åé¡ãçºçããŸãã
ããã©ã«ããšããŠtkã«ç§»è¡ããã®ã¯çŽ æŽãããããšã§ã¯ãªããšæããŸãã
ããã©ã«ããšããŠtkã«ç§»è¡ããã®ã¯çŽ æŽãããããšã§ã¯ãªããšæããŸãã
ã©ãããæå³ïŒ AnacondaãQt5ã䜿çšããæ¹ãè¯ããšæããŸããïŒ
Qt5ã¯ããåªãããã¬ãŒã ã¯ãŒã¯ã§ãããç®±ããåºããŠããã«hi-dpiç»é¢ããµããŒãããŸããTkã«æ»ããšããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãäœäžãããšæããŸãã
ããããŸããããããã¬ã¹Dockerã³ã³ããã§å®è¡ãããŠããããŒãããã¯ã«ã€ããŠå°ãå¿é
ããŠããŸãã ããããMatplotlib 1.5ïŒç§ã¯æãïŒã§ã¯ãããŒãããã¯ã¯ããã©ã«ãã®ããã¯ãšã³ããšããŠèªåçã«inline
ãéžæããŸãããïŒ
ããã¯å®å šã«jupyteråŽã«ãããŸãã
MPLBACKEND
ç°å¢å€æ°ããŸã èšå®ãããŠããªãå Žåãipykernelã¯ã€ã³ã©ã€ã³ããã¯ãšã³ããåç
§ããããã«èšå®ããŸãã ãœãŒã¹ã³ãŒãã®ã³ã¡ã³ãã«ãããšãããã¯mpl> = 1.5ã«åœ±é¿ããmatplotlibrcãããåªå
ãããŸãããã³ãŒãå
ã®ããã¯ãšã³ããæ瀺çã«éžæããããšãããåªå
ãããŸããã
ãã£ãããïŒ ãããªããããã¯éããããšãã§ãããšæããŸãã
OPã¯ããã®ãšã©ãŒãåé¿ããããã«ãmatplotlibrcã§ãaggããMatplotlibã®ããã©ã«ãããã¯ãšã³ããšããŠèšå®ããã ãã§ãã
ãããèªã¿çŽããšãå ã ã¯ã«ãŒãã«ã§ã¯ãªããã¿ãŒããã«IPythonã«é¢ãããã®ã§ããããšãããããŸããã MPLBACKENDã®èšå®ã«ã€ããŠäžèšã§è¿°ã¹ãããšã¯ãã¿ãŒããã«IPythonã«ã¯é©çšãããŸããã
å ±åãããŠããã®ã¯IPythonã®ãã°ã§ã¯ãªããšæãã®ã§ãããã§ãããéããŸãã ãããã¬ã¹ããã¯ãšã³ããæ§æããã®ã¯ãŠãŒã¶ãŒæ¬¡ç¬¬ãããããŸããããMPLã®ãIPythonå ããã§ãã¯ã§ããããã¬ã¹ç°å¢ã«ãããã©ããããã§ãã¯ããå¿ èŠããããããããŸããã ãããã«ãããIPythonããããä¿®æ£ããããã«ã§ããããšã¯äœããªããšæããŸãã
ãã ãããã®åé¡ãè°è«ã®å ŽãšããŠåŒãç¶ã䜿çšããŠãã ããã
ã¯ãããããipythonã®ãã°ã§ã¯ãªãããšã¯æããã§ãã MPLã¯ã誰ããipythonã·ã§ã«ãèµ·åããŠmatplotlib.pyplotãã€ã³ããŒãã§ããããã«ããããã®ãã§ãã¯ãè¡ããmatplotlibrcãªãã·ã§ã³ãå€æŽããããããã¯ãšã³ããæ瀺çã«èšå®ãããããã«ãã¯ã©ãã·ã¥ããªãããã«ããå¿ èŠããããšæããŸãã
@timothydmortonåé¡ã¯ãããŠãŒã¶ãŒãGUIããã¯ãšã³ãã®äœ¿çšãèŠæ±ããããããã¯äžçš®ã®æå³ã§ãããAggã«ãã©ãŒã«ããã¯ããå¿ èŠãããããšããŠãŒã¶ãŒãGUIããã¯ãšã³ãã®äœ¿çšãèŠæ±ããã ãã§ãã§ããªããã®éãã瀺ããŠããŸãã XãµãŒããŒãå®è¡ãããŠããªããããæååå ¥åãããéç¥ããå¿ èŠããããŸããã ãã¬ãŒããªãã¯æŽå²çã«ã€ã³ã¿ã©ã¯ãã£ããŠãŒã¶ãŒã«æå©ã§ããããããããã衚瀺ãããªãããã°ãé²ããããããã¬ã¹ãµãŒããŒã§ã€ã³ã¿ã©ã¯ãã£ãããã¯ãšã³ãã䜿çšã§ããªãããã°ãçºçããã®ãé²ããŸããåŸè ã®å ŽåããŠãŒã¶ãŒã¯æ確ã«ãªããŸããäœãæªãã®ãã«ã€ããŠã®ãšã©ãŒã
æè¿ãããã¯ãšã³ããšããŠãã€ã³ã¹ããŒã«ãããŠããQtãã¬ãŒããŒãããµããŒãããæ¹æ³ãšãããã¯ãšã³ããã©ãŒã«ããã¯ãå®è¡ããæ¹æ³ã«ã€ããŠããã€ãã®è°è«ããããŸããããGUIãã¬ãŒã ã¯ãŒã¯ã¯ãåæã«ã€ã³ããŒããããšãäºãã®è¶³ãèžãåŸåããããããäžè¬çã«æ³šæãå¿ èŠã§ãã
ç§ããã®åé¡ã®åœ±é¿ãåããŠãããipythonã®ä»£ããã«éåžžã®pythonã䜿çšãã以å€ã«è¯ãåé¿çãèããããšã¯ã§ããŸããã
@russelljjarvisã¯ã¡ãã£ãšããç
©ãããã§ãããipythonã®èµ·åæã«æåã«å®è¡ããã³ãã³ããimport matplotlib; matplotlib.use('agg')
å Žåãipythonã¯æ©èœããã¯ãã§ãã
ã¯ãïŒ
import matplotlib; matplotlib.use('agg')
ç§ãå®è¡ããæåã®ã³ãã³ãã§ãããããã§ã次ã®ããã«ãªããŸãã
In [1]: QXcbConnection: Could not connect to display :0
Aborted
ããã°ã©ã ããšã©ãŒã«ééããåŸãéåžžããããã°ãšã¢ã³ããŒãããã®ããã³ããã衚瀺ãããŸãã
æåã«å®è¡ããåŸã ipython -i file_name.py
PythonãåŒã³åºããŸãïŒ ipcluster start -n 8 --profile=default &
file_nameã®æåã®è¡ã¯import matplotlib; matplotlib.use('agg')
ipclusterãå®è¡ãããšåé¡ãçºçããã®ã§ã¯ãªãããšæããŸãã
ããã§å©çšå¯èœãªç°å¢å€æ°ã䜿çšãã解決çããã
èšå®export QT_QPA_PLATFORM='offscreen'
ç§ã«.bash_profile
ç§ã®ããã«åããŸããã
ååãæè¿åãããšãææ¡ããŸããã Dockerã®ã³ã³ããã¹ãã§ã¯ãã¹ããŒãã¡ã³ãã¯æ¬¡ã®ããã«ãªããŸãã
ENV QT_QPA_PLATFORM offscreen
ã ç§ã¯ä»ãããå¹æçã«ãã¹ãããŠããŸãã
åããšã©ãŒãçºçããŸãïŒ
export QT_QPA_PLATFORM='offscreen'
èšå®ãããšããšã©ãŒã¡ãã»ãŒãžã次ã®ããã«å€æŽãããŸããã
(python:17399): Gtk-WARNING **: cannot open display:
ããŒãããã¯ã§çŽæ¥ãœãªã¥ãŒã·ã§ã³
import os
os.environ['QT_QPA_PLATFORM']='offscreen'
åŸçºã®ãã©ããŒã¢ãããšããŠãMatplotlib 3.0以éãèªåããã¯ãšã³ãéžæããµããŒããããããã¬ã¹ãµãŒããŒã§GUIããã¯ãšã³ãã䜿çšããããšã¯ããŸããïŒãã ããèŠæ±ãããrcparamsãã¡ã€ã«ã¯åŒãç¶ãå°éãããŸãïŒã
ãã®åçhttps://unix.stackexchange.com/questions/192642/wkhtmltopdf-qxcbconnection-could-not-connect-to-display
æåã§ã€ã³ã¹ããŒã«ãããšè§£æ±ºããŸãã
ãcondaupdatematplotlibãã§åé¡ãä¿®æ£ãããŸããã
ãšã¯ã¹ããŒãQT_QPA_PLATFORM = 'ãªãã¹ã¯ãªãŒã³'
åŸçºã®ãã©ããŒã¢ãããšããŠãMatplotlib 3.0以éãèªåããã¯ãšã³ãéžæããµããŒããããããã¬ã¹ãµãŒããŒã§GUIããã¯ãšã³ãã䜿çšããããšã¯ããŸããïŒãã ããèŠæ±ãããrcparamsãã¡ã€ã«ã¯åŒãç¶ãå°éãããŸãïŒã
Matplotlib 3.1ã¯èªåããã¯ãšã³ãããµããŒãã§ããªããããæåã§ãAggããèšå®ããå¿ èŠããããŸãã
ããã¯ãAnacondaã®Matplotlibã®ããã©ã«ãã®ããã¯ãšã³ããQt5ã§ããããã«çºçããŸãã ãã®çš®ã®åé¡ãåé¿ããããã«ãTkã«å€æŽããããšãæ€èšããŠããŸãã
ããã¯ã©ãã§å€æŽã§ããŸããïŒ
ããã¯export QT_QPA_PLATFORM=offscreen
èšå®ããåŸã®ç§ã®ãšã©ãŒã§ã
[tb571<strong i="7">@da02</strong> ~]$ jupyter console --kernel slicer-4.11
qt.qpa.plugin: Could not find the Qt platform plugin "offscreen" in ""
This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.
QT_QPA_PLATFORM='offscreen'
èšå®ããåŸãmatplotlibããã³fastaiã©ã€ãã©ãªã®ã€ã³ããŒããå®è¡ãããŸãã
ãã ããplt.figureïŒïŒãŸãã¯ãããããåºåãããã®ä»ã®ã³ãã³ãã§ã¯ã次ã®ãšã©ãŒãçºçããŸãã
This plugin does not support propagateSizeHints()
This plugin does not support raise()
ãã®ãšã©ãŒãçºçããŸã
æãåèã«ãªãã³ã¡ã³ã
ããã§å©çšå¯èœãªç°å¢å€æ°ã䜿çšãã解決çããã
èšå®
export QT_QPA_PLATFORM='offscreen'
ç§ã«.bash_profile
ç§ã®ããã«åããŸããã