概要
私は家では、ノートPC(Chromebook)から計算用のローカルサーバー(ubuntu)にsshで繋いで、サーバー上でプログラミングしています。この環境だと、ノートPCの気楽さとサーバーの計算力のいいとこ取りができます。
ところで、Pythonでなにか計算するときの結果の可視化にはよくPlotlyを使うのですが、サーバー上のPythonスクリプトでは fig.show()
でグラフを表示することができません。
PlotlyはHTMLファイルを出力します。HTMLファイルならば、WEBサーバーを立ち上げて配信すればいいじゃないかと思い実際にやってみたところ、グラフを確認しながら快適に計算できました。
方法
以下の手順で勧めます。
- サーバーパソコンでWEBサーバーを立ち上げる(バックグラウンドで実行)
- サーバーパソコンで計算し、HTMLファイルを出力する
- ノートPCからローカルサーバーにアクセスする
WEBサーバーを立ち上げる
WEBサーバーはなんでもよいのですが、Pythonならば標準のモジュールを使って立ち上げることができます。
python -m http.server 3000 &
最後の&はバックグラウンドで実行するという意味です。これでポート3000番で通信ができます(ポートが開いていれば)。ここにPlotlyで作成したHTMLファイルがあれば、グラフにアクセスできます。
ただしWEBサーバーはNode.jsのlive-serverがよりおすすめです。live-serverでサーバーを立ち上げると、Plotlyが出力するHTMLファイルが更新される度に、ブラウザの表示が自動で更新されるため、非常に便利です。
HTMLファイルを出力する
Plotlyの基本的な書き方は今回はお話しませんが、write_htmlメソッドを使ってHTMLファイルを出力します。出力先は1でWEBサーバーを立てたディレクトリ以下であれば、どこでもいいです。
import plotly.express as px
fig = px.scatter(x=[0, 1, 2, 3, 4], y=[0, 1, 4, 9, 16])
fig.write_html('some_plot.html')
ローカルサーバーにアクセスする
ノートPCから、WEBサーバーにアクセスします。ブラウザから、 http://192.168.1.xxx:3000
のようなURLでサーバーにアクセスすると、サーバーを立ち上げた場所のファイルなどが表示されると思います。
そこに出力したHTMLファイルがあれば、例えば http://192.168.1.xxx:3000/some_plot.html
でグラフを表示することができます。
終わりに
そういえばJupyter Labをローカルに開放すれば、Jupyter Lab上でグラフの可視化はできますね。ですがグラフの雛形を開発するときには上記の方法が役に立つかと思います。どうぞお試しあれ^^