通常F#はWindows上で使っているが、諸事情によりWSL上で使っていた際にグラフ描画でつまづいたので、方法を記録しておく。
環境
- WSL2
- Ubuntu 20.04.2 LTS
- .NET 5.0.8
- F# 5.0
- F# Interactive version 11.4.2.0
方法
F#(や.NET)でのグラフ関係のライブラリはいろいろあるが、WindowsのAPIに依存していたり不足するファイルをインストールしなければならなかったりして、なかなかうまくいかなかった。そんな中で、グラフを画像ファイルとして保存できた方法を2通り紹介する。グラフをウィンドウとして表示させるのはまた面倒そうなので今回は避けた。
なお、いずれの方法も、Xサーバー(私はVcXsrvを使用)を起動しないと途中で停止してしまう(グラフィック系だから?)。Xサーバー等の導入はこちらなどを参照。
ScottPlot
Linux and MacOS users may need to install libgdiplus to use ScottPlot
とあるのでlibgdiplusをインストールする。
sudo apt install libgdiplus
簡単な例
#r "nuget: ScottPlot"
open ScottPlot
let x = [| 1. .. 10. |]
let y = x |> Array.map (fun n -> n * n)
let plt = Plot()
plt.AddScatter(x, y)
plt.SaveFig("hoge.png")
Plotly.NET
こちらも単体では動かず、以下のようなエラーが出た。
error while loading shared libraries: libxkbcommon.so.0: cannot open shared object file: No such file or directory
error while loading shared libraries: libgtk-3.so.0: cannot open shared object file: No such file or directory
そのため追加でインストールをする。
sudo apt install libxkbcommon0 libgtk-3-0
パッケージ名の検索について
簡単な例
#r "nuget: Plotly.NET, 2.0.0-preview.6"
#r "nuget: Plotly.NET.ImageExport, 2.0.0-preview.6"
open Plotly.NET
open Plotly.NET.ImageExport
let x = [ 0. .. 10. ]
let y = x |> List.map (fun n -> n * n)
Chart.Point(x, y)
|> Chart.savePNG("hoge")