以下の内容はhttps://ujimushisradjp.hatenablog.jp/entry/2025/01/17/222826より取得しました。


Plots.jlのGRバックエンドでフォントをインストールせず日本語・絵文字を利用する

Plots.jlを魔改造せず手軽にGRバックエンドで日本語フォントを利用する模索

前回のPlots.jlのGRバックエンドで日本語と絵文字を同時に使うを書いた後, GRフレームワークのCライブラリのドキュメントを確認すると, gr_loadfont関数の解説に, フォント名に指定可能な内容として

  • フォントファイルの絶対パス
  • OSにインストール済みのフォントファイル名
  • 環境変数GKS_FONT_DIRSの中のフォントファイル名

ということで,フォントファイルの絶対パスを指定すればインストールしていなくても いいことが分かった。

また,Plots.gr_set_font関数 の中身を確認すると,Plots.gr_font_familyGR.loadfontの結果を保存してさえすれば,必ずしも Plots.jlの関数を魔改造する必要がないことが分かった。

ということで次のような関数を作成した。

# https://github.com/ujimushi/PlotsGRBackendFontJaEmoji.jl の元ネタです
using Plots

function plots_gr_register_user_font(fontname,
                                     fontpath)
    font_id = lowercase(fontname)
    if !haskey(Plots.gr_font_family, font_id)
        gff_id = Plots.GR.loadfont(fontpath)
        if gff_id > 0
            Plots.gr_font_family[font_id] = gff_id
        else
            @info "「$fontname」の登録に失敗しました"
        end
    else
        @info "「$fontname」は既に登録されています"
    end
    nothing
end

ここで,次のようにCicaフォントのボールド体の絶対パスを指定・登録して プロットしてみる。

using Plots
import GR
plots_gr_register_user_font(
    "cica bold",
    joinpath(ENV["HOME"], "Downloads", "Cica_v5.0.3", "Cica-Bold.ttf"))
gr(fontfamily="cica bold")
plot(sin; title="太字 🐻")
savefig("cica_bold.png")

ちゃんと日本語と絵文字が表示された。

インストールしなくても表示できるということは,パッケージにもしやすい。

ということで,Pythonにおけるmatplotlib-fonja のようなパッケージのつもりで PlotsGRBackendFontJaEmoji.jlのような感じで公開してみた。

PlotsGRBackendFontJaEmoji.jlの紹介

このパッケージの特徴はusing Plots; using PlotsGRBackendFontJaEmojiだけで日本語と絵文字が利用可能,というところだ。

これまでのPlots.jl魔改造が必要な方法とは全くお手軽さが違います。

インストール方法

パッケージモードからは次のような感じでインストール可能です。

(@v1.11) pkg> add https://github.com/ujimushi/PlotsGrBackendFontJaEmoji.jl

もしくは次のような感じです。

using Pkg
Pkg.add(url="https://github.com/ujimushi/PlotsGrBackendFontJaEmoji.jl")

利用例

次のような感じでCicaフォントを用いた日本語と絵文字の同時表示が可能です。

using Plots
using PlotsGRBackendFontJaEmoji
gr()
plot(sin; title="日本語🐱")

フォント設定をリセットする時はdefault()と引数無しでdefault関数を呼びます。 cicaフォントの登録名はFONT_JA_EMOJIに設定してあるので,

using Plots
using PlotsGRBackendFontJaEmoji
gr()
default()
plot(sin; title="日本語🐱", titlefontfamily=FONT_JA_EMOJI)

でタイトルのみ絵文字と日本語を使うフォントに設定する,等が可能です。

Windowsの場合だとplots_gr_register_user_font("msgothic", "msgothic.ttc")とか Linuxの場合だとplots_gr_register_user_font("noto sans cjk", "NotoSansCJK-Regular.ttc") とかで登録し,フォントファミリーを第一引数に設定することで,TTCフォントも利用可能です。

ただし,第0面固定で1面以降のグリフは設定できません。

まとめ

とりあえず,個人的にはPlots.jlのGRバックエンドで日本語を取扱う方法についての探索も これで一区切りです。

日本のJulia言語ユーザーのおえらいさんの言う事によると, 「できるだけ新しくてかつ信頼できる人の解説を見るのがよい」らしいので,信頼できない私の言うことは信じず, 皆さんにはぜひともPyPlotで日本語を利用して欲しいと思います。




以上の内容はhttps://ujimushisradjp.hatenablog.jp/entry/2025/01/17/222826より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14