スポンサーリンク

Windows 11にDocker Desktopを導入(4)windows上のdocker内のUbuntuからmatplotlibのshow()が表示できない問題を解決

問題

Python環境

まず、以下のようにpython環境を整えておく。

apt install python3
apt install -y python3-pip
apt install python-is-python3

サンプルコード

必須

pip install numpy
pip install matplotlib

test.py

import numpy as np
import matplotlib.pyplot as plt

def plot_sample(start, end, step):
    x = np.arange(start, end, step)
    y = np.sin(x)

    plt.plot(x, y)
    plt.title('Sine Curve')
    plt.xlabel('x')
    plt.ylabel('sin(x)')
    plt.grid(True)
    plt.show()

if __name__ == "__main__":
    plot_sample(0, 2*np.pi, 0.01)

実行

python test.py

症状

上記コードを実行しても何も起こらない

解決手順

ホストのwindowsにVcXsrvをインストール

VcXsrvはXサーバーで、windows上でLinuxのGUIを表示するのに必要。以下からダウンロード

https://sourceforge.net/projects/vcxsrv/

設定は以下のサイトがとても端的にまとまっている。

https://qiita.com/ryoi084/items/0dff11134592d0bb895c

以下のように設定。Native openglを外す。

最後にSave Configurationで設定ファイル(拡張子.xlaunch)を出力。これを開くとサーバーが起動する。

docker内の~/.bashrcに追記

GUIを表示したいUbuntuに、Xserverがあることを教える設定をする。

vim ~/.bashrc などで、.bashrcを開き、末尾に以下を追記

export DISPLAY=MY-HOST-NAME.mshome.net:0.0

ここで、MY-HOST-NAMEは自分のパソコンのホスト名を記述。自分のホスト名はPowerShellなどを起動して、ipconfig /all をすると出てくる。

ここで一度実行

ここで一度、test.pyを実行すると、以下のエラーが出た。

UserWarning: FigureCanvasAgg is non-interactive, and thus cannot be shown
plt.show()

これはtkinterがインストールされていないために起こるらしい。なので以下を実行。

tkinterは、インストール途中、エリアを聞かれるのでAsia、Tokyoを指定。

apt install python3-tk

他に、PySide2が(も)要求されるかもしれない。

pip install PySide2

あるいはPyQt5が(も)必要かもしれない。

pip install PyQt5

参考

https://qiita.com/ryoi084/items/0dff11134592d0bb895c

https://and-engineer.com/articles/YWjayhIAACEAEjeC

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)


この記事のトラックバックURL: