いまだに正式リリースされていないPlots.jl Ver.2用に 先日紹介したPlots.jlのGRバックエンド用フォントパッチ(Linux用)を移植した。
誰の役にも立たない情報であるが,いつかバージョン2が出た時の自分のために記録しておく。 といっても,バージョン1よりもGR用のラッパーの位置が分かりづらくなっているだけで, 基本的にはあまり変わらない。
# plots_v2_gr_font_patch_for_linux.jl # using Pkg # plotsv2_env = "/home/ujimushi/test" # Pkg.activate(plotsv2_env) using Plots import GR MyGR = PlotsBase.get_backend_module(:GR)[1] @eval MyGR begin function gr_custom_fontlist_linux() コマンド出力 = pipeline(`fc-list`, `egrep "[.](ttf|ttc|otf)"`,`cut -d : -f 1`) 読込(x) = read(x, String) 終端改行削除(x) = chomp(x) 行分割(x) = split(x, "\n") ファイル名抽出(x) = basename(x) fnames = コマンド出力 |> 読込 |> 終端改行削除 |> 行分割 .|> ファイル名抽出 Dict([(chopsuffix(f, r"[.](ttf|ttc|otf)") , f) for f in fnames]) end """ パッチで指定可能なフォント名 => ファイル名の辞書型 `"フォント名" in keys(PlotsBase.get_backend_module(:GR)[1].gr_custom_fontlist)` でフォントが選択可能か分かる """ const gr_custom_fontlist = gr_custom_fontlist_linux() function gr_set_font( f::Font, s; halign = f.halign, valign = f.valign, color = f.color, rotation = f.rotation,) _MyGR = Plots.PlotsBase.get_backend_module(:GR)[1] family = lowercase(f.family) GR.setcharheight(_MyGR.gr_point_mult(s) * f.pointsize) GR.setcharup(sincosd(-rotation)...) if !haskey(_MyGR.gr_font_family, family) # この辺を変更 _MyGR.gr_font_family[family] = GR.loadfont(gr_custom_fontlist[f.family]) end haskey(_MyGR.gr_font_family, family) && GR.settextfontprec( _MyGR.gr_font_family[family], _MyGR.gr_font_family[family] ≥ 200 ? 3 : GR.TEXT_PRECISION_STRING, ) _MyGR.gr_set_textcolor(plot_color(color)) GR.settextalign(gr_haligns[halign], gr_valigns[valign]) nothing end end
使う時は上記のファイルをインクルードして必ずgr()
する必要がある。
前回も記述したが存在しないフォント名を指定するとエラーで終了するので注意。