WSL環境で利用するmatplotlib
これは過去に作ったものなので再現性まで確認できてないけど、当時同じことで2台動かしたので。ここではpyside6を使ってwsl/ubuntu環境でmatplotlib/pygameを表示させる手順を残しておきます。また、WSLgのスケーリング設定にも触れておきます。
wsl環境でjupyterを使わないでグラフ表示をさせる場合は可能です。昔は厳しかったけどWSLgというのが使えるようになったのでlinuxなどのX Windowシステムが表示ができるようになってるんですね。
- WSL2/Ubuntu 26.04 LTS
aptを使ってインストールしてるのでdebian系を使ってるのなら似たりよったりでしょう。すでにuvが使える環境になってることは前提で記事にしています。もしWSL-Ubuntuでuv環境を整えてないのでしたら、他の記事を検索してみてください。
pyside6 + matplotlib
この2つの組み合わせでQtバックエンドでmatplotlibが表示可能になってます。ただuv で uv add pyside6 matpltlibをしただけで使えるというものではないのが注意です。それはqt6のライブラリがWSLの下のubuntu環境に入ってないからです。まずは必要なライブラリを入れてみましょう。これがなければエラーが出ます。
sudo apt update
sudo apt install -y libxcb-cursor0 libxkbcommon-x11-0 libxcb-icccm4 libxcb-image0 libxcb-keysyms1 libxcb-randr0 libxcb-render-util0 libxcb-xinerama0 libxcb-xfixes0 libxcb-shape0
これが必要なライブラリをインストールする手順ですね。これで基本的に完了です。
uvでのテスト
sandbox というプロジェクトを作ってみましょう。
uv init sandbox
そしてライブラリを入れてみます。
cd sandbox
uv add matplotlib pyside6
uv add ipython --dev
これでとりあえずipythonまで動せるようにしておきます。テストコードですが次のものです。一応sandbox/src/test.py と名付けておきます。
import matplotlib
# matplotlib.use('QtAgg') # PySide6をバックエンドとして使用
import matplotlib.pyplot as plt
# 描画処理
plt.plot([1, 2, 3], [4, 5, 6])
plt.title("WSLg + PySide6 Example")
plt.show()
matplotlibのバックエンドをQtにするということをしておくのは明示しなくても自動的に行われますので、コメントアウトした一行を一応示しておきます。明示したいときはあのようにしてください。
ipythonで動かしてみましょう。
$ uv run ipython
Python 3.12.13 (main, Jun 11 2026, 04:03:26) [Clang 22.1.3 ]
Type 'copyright', 'credits' or 'license' for more information
IPython 9.16.1 -- An enhanced Interactive Python. Type '?' for help.
Tip: The `%timeit` magic has a `-o` flag, which returns the results, making it easy to plot. See `%timeit?`.
In [1]: import matplotlib
...: matplotlib.use('QtAgg') # PySide6をバックエンドとして使用
...: import matplotlib.pyplot as plt
...:
...: # 描画処理
...: plt.plot([1, 2, 3], [4, 5, 6])
...: plt.title("WSLg + PySide6 Example")
...: plt.show()
Call to org.freedesktop.portal.Settings.ReadAll failed QDBusError("org.freedesktop.DBus.Error.ServiceUnknown", "The name org.freedesktop.portal.Desktop was not provided by any .service files")
Call for getting org.freedesktop.portal.FileChooser version failed QDBusError("org.freedesktop.DBus.Error.ServiceUnknown", "The name org.freedesktop.portal.Desktop was not provided by any .service files")
In [2]:
plot.show()のあとウインドウが開き直線のグラフが出てきます。出ればOKです。ウインドウの右のXをクリックすれば終了です。
Call to org.freedesktop.... というワーニングが出ますが、これはWSLg 特有の仕様(Desktop Portal 非搭載)によるものであり、グラフ表示および動作には問題ないため無視してよい。(geminiに聞いてみた。)
ここではipythonを利用して確認してますが、次のようにしてもよいです。
uv run src/test.pyWSLg のスケーリング設定(高解像度ディスプレイ対策)
解像度次第では小さいウインドウになることがあります。特に高解像度ディスプレイを利用してる場合に起こります。簡単な対処は少し書いておきます。
これは WSLの設定を書くのでwindowsのpowershellで行ってください。
ユーザーのディレクトリのしたに .wslgconfigというファイルを作成します。
そこに次のように書いてください。場所は C:\Users\<ユーザー名>\.wslgconfig です。
[system-distro-env]
WESTON_RDP_FRACTIONAL_HI_DPI_SCALING=true
WESTON_RDP_HI_DPI_SCALING=true
WESTON_RDP_DEBUG_DESKTOP_SCALING_FACTOR=200
guiApplications=true
と書いて、一度 ubuntuをシャットダウンさせます。
wsl --shutdown
これでwsl2上のubuntuを再起動すればいいです。ここで、SCALING FACTOR 200にしてありますが。200%の意味です。詳細はわからないけど、125や150なら汚い表示になることが知られてるので2倍のサイズにしてあります。
補足: WSL で pygame を動かす場合
おまけとして書いておきます。テストコードは用意しませんが、pygameも動くようにしています。pygameは独自のエンジンを利用してますので、pyside6は不要です。
ただし、SDL 関連のシステムライブラリが不足している場合は以下の apt パッケージを追加することで動作します。
sudo apt update
sudo apt install -y libsdl2-2.0-0 libsdl2-image-2.0-0 libsdl2-mixer-2.0-0 libsdl2-ttf-2.0-0 libasound2
僕も既にこれはインストールされていて動いてるのは確認しています。あとはuv add pygameでなんとかなります。