VSCode+Juliaで、Jupyterノートブックにコピペできるグラフを描く方法

Julia

はじめに

最近Juliaを使い始めていろいろやり始めたのですが、もともとがVSCode+python+jupyterの甘えに甘えた環境&コード生成だったのでいろいろ障害が発生しました。

その中で特に困ったのがグラフの表示方法でした。Juliaの標準的なグラフ描画moduleのPlots+VScode+Jupyter+Juliaではコピペのできるグラフがinline上には出ませんでした。

これが意外とコピペできないとかなりめんどくさくなり、なんとか手を尽くしました。

↑こんな感じで、表示されるのみでコピペはできない。

一見して基礎的っぽい内容だとネットにいっぱい転がっているのかなと思いきや、Pythonとは違ってJuliaはあまり情報がありませんでした。また、LLMもすぐには回答が出せない内容だったので、備忘録がてらメモしておきます。

Plotsでの解決

まず、juliaの標準的なmoduleでの解決策です。
結論を先に言うと、
JuliaのPlots.jl+VSCodeノートブックでは、直接画像をコピペする機能が標準ではサポートいないようです。
つまり、仕様上できないのが現状です。
ChatGPTに理由を聞いてみると:

・Plots.jlは内部的に一度SVGやPNGファイルを生成して表示しているだけで、Python(Jupyter環境でのMatplotlibやPlotlyみたいに)ブラウザ的なインタラクション機能が組み込まれていないため。
・Julia用VSCode拡張(julia-vscode)のノートブックサポートは、まだPython Jupyterに比べると発展途上。
・画像データそのものが「コピー可能なUI」になってないので、ブラウザ上で右クリックできるような感じにならない。

Pyplotsを利用

Pythonから逃げてJuliaを使い始めましたが、やはりPythonの資産を使わなければいけないようです。PyplotはJuliaからmatplolibを利用するモジュールとなっています。PyPlot · Julia Packages

Pyplotを以下のようにインストールしましょう。

using Pkg
Pkg.add("PyPlot")

インストールが完了したら、即問題なく利用…というわけにもいきません。
次にJuliaのREPL を開くか、VS CodeのNotebook内に新しいセルを作成します。
以下のコマンドを実行して、Condaパッケージを追加します(もしまだ追加していなければ)。

using Pkg
Pkg.add("Conda")


次に、以下のコマンドを実行して、PyCallが使用するPython環境にipykernelをインストールします。

using Conda
Conda.add("ipykernel")


このコマンドは、PyCallが内部的に使用しているConda環境にipykernelパッケージを追加します。インストールには少し時間がかかる場合があります。
ipykernelのインストールが完了したら、VS CodeでJuliaカーネルを再起動してください。カーネルを再起動することで、新しいPython環境の設定がJuliaに反映されます。

ここまでくればあとはplotするだけで、

using PyPlot

ηₖᴺ(α,k,N) = ( sinc(k/N) * sinc-k)/sinc((α-k)/N) )^2 

λ₀ = 1
λ = 1
α = λ₀/λ
k = 1
N = Vector(1:16)

η₁ᴺ = map(n -> ηₖᴺ(α, k, n), N)

figure()      #figure()でリセットしないと前のplotに上書きされる
plot(N, η₁ᴺ)
xlabel("step number")
ylabel("efficiency")
xlim(0,16)
ylim(0)
grid()
display(gcf())  #これがめちゃくちゃ重要、これがないと表示されない

とすればコピペのできるグラフがplotされます。

このコードのもとはこちらなので興味がある方を書いているので見てください

コメント

タイトルとURLをコピーしました