したがって、Windows用のUbuntu(Linux用のWindowsサブシステム)では、Aggバックエンドを使用して、プロットを表示するのではなく、単に画像を保存する必要があることを人々が示唆しています。
import matplotlib
matplotlib.use('Agg') # no UI backend
import matplotlib.pyplot as plt
import numpy as np
t = np.arange(0.0, 2.0, 0.01)
s = 1 + np.sin(2*np.pi*t)
plt.plot(t, s)
plt.title('About as simple as it gets, folks')
#plt.show()
plt.savefig("matplotlib.png") #savefig, don't show
どうすれば、plt.show()が実際に画像を表示する場所に到達できますか?現在のオプションは、plot.show()をオーバーライドして、代わりにウィンドウの/ mnt / c / Users / james / plots /の下にあるplot-148123456.pngを保存し、画像を表示するエクスプローラーウィンドウを開くことです。
そのフォルダーをホストしてブラウザーを使用できると思います。
私の目標は、どこかで画像をftpするコードを変更することなく、上記のコードのような簡単な例を実行できるようにすることです。プロットをウィンドウに表示したいだけです。
誰かがそれを行うためのまともな方法を見つけましたか?
わかりましたので、次のように動作させました。WindowsにUbuntuをインストールし、anaconda python 3.6をインストールしました。
sudo apt-get update
sudo apt-get install python3.6-tk
(python*-tk
使用しているpythonバージョンに別のdepnding をインストールする必要がある場合があります)pip install matplotlib
(matplotlibの場合。他の多くの機能も動作するようになりました)export DISPLAY=localhost:0.0
(~/.bashrc
永続化するために追加します。以下のWSL2を参照してください)とにかく、結局のところ、wslのubuntuで実行されているこのコードは次のように機能しました。
import matplotlib.pyplot as plt
import numpy as np
t = np.arange(0.0, 2.0, 0.01)
s = 1 + np.sin(2*np.pi*t)
plt.plot(t, s)
plt.title('About as simple as it gets, folks')
plt.show()
多分これはJupyterノートブックか何かを介して行う方が良いかもしれませんが、Linux用サブシステム上のUbuntu for Windowsで基本的なコマンドラインのpython matplotlib機能を持っているのは素晴らしいことです、そしてこれは他の多くのguiアプリも機能させます。
たとえば、xeyesをインストールすると、x11-appsをインストールし、それをインストールすると、多くのGUIアプリが使用するGTKがインストールされます。ただし、重要なのは、DISPLAYを正しく設定し、xサーバーをWindowsに設定したら、ネイティブubuntuで機能するほとんどの機能がWSLで機能することです。
編集2019-09-04:一部のライブラリをアップグレードした後、今日、「画面リソースを取得できません」という問題が発生しました。そこで、VcXsrvをインストールして、Xmingの代わりに使用しました。https://sourceforge.net/projects/vcxsrv/からインストールし、xlaunch.exeを実行して、複数のウィンドウを選択し、次に次へ、次に[OK]をクリックします。その後、すべてが機能しました。
WSL 2ユーザー向けの編集2020-06-23 WSL2(現在インサイダーの高速リング)はGPU / Dockerをサポートしているため、アップグレードする価値があります。ただし、vmで実行されます。WSL 2の場合は、同じ手順1〜4に従ってください。
export DISPLAY=`grep -oP "(?<=nameserver ).+" /etc/resolv.conf`:0.0
注:一部のユーザーはのようなエラーを受け取りましたcouldn't connect to display "172.x.x.x:0"
。その場合は、次のコマンドを使用して、DISPLAYに保存されているIPアドレスを確認してくださいecho $DISPLAY
。表示されたIPが間違っていると思われる場合(つまり、「8.8.8.8」または別の機能していないIPアドレス)~/.bashrc
、ポイント5 で表示されたコードを、インスタンスのIPアドレスを取得するコードに変更する必要があります。あるユーザーはこれがうまくいったと言いました:export DISPLAY=$(ifconfig | grep inet | awk '{print $2}' | head -n 1 | awk '{print $0":0"}')
。ただし、一部のユーザーにとっては機能しませんでした。YMMV、しかしあなたのIPを見つけてDISPLAYのために使用するだけです。ほとんどのWSL2ユーザーの場合、#5のコマンドが機能します。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加