はじめに
せっかく自分がこの一年ぐらい色々調べてPlots.jlのGRバックエンドで日本語を正しく使う方法が 確立したのにあまり伝わってなさそうなのが気に入らない。
そう思って少し煽ったタイトルの記事を書いてみました。
多分仕事がうまくいかなくて,イライラしているのが原因だと思います。
Plots.jlのGRバックエンドのフォント指定に関しての情報まとめ
今までに自分が調べた内容については次の通りです。
正式なユーザーフォントの指定方法
GRライブラリに登録されているフォント名か
OSにインストールされているTTFフォントのファイル名の「拡張子を除いたファイル名」を指定するのが正しいです。
日本語のWindows場合,これに該当するシステムの日本語フォントは游明朝ぐらい。指定フォント名はyumin,yumindb,yuminlのどれかで
それぞれ標準,中太,細字です。
それ以外は大体TTCフォント(TrueTypeコレクションフォント)なので,今のGRバックエンドの標準の方法では指定できません。
よく利用されるIPAフォントの場合はOSにインストール後,次のように指定します。PyPlotのようにくれぐれもIPAGothicなどと指定しないように
気をつけましょう。
指定したフォントの制限
GRバックエンドで指定できるフォントの制限は次の通りです。
- カラーフォントは利用できない。モノクロのみ
- 指定したフォントに含まれないグリフの文字は表示できない
- 合成フォントとして利用する方法がない
- でたらめのフォント名を指定すると
OSの標準のフォント表示で表示する。 この時正しく表示できるのは画面だけでpngファイルには出力できない
なので,漢字と絵文字を同時に表示するのは極めて困難です。 ただ,漢字と絵文字両方のグリフ情報を持つフォントさえ用意すれば表示可能です。
ネット検索で引っかかるGRバックエンドの日本語関係の記事
GR バックエンドの Plots.jl で日本語かけるでキュ!
大体の検索サイトで一番上に引っかかる内容の記事である, GR バックエンドの Plots.jl で日本語かけるでキュ!。
実は掲載当初は間違ってはいなかったと思うのですが,今となっては間違い。通常だと漢字の部分は表示できないと思います。
また,表示できたとしても「指定したフォントの制限」の4.によるものです。
なので,最も罪深いのはコメント覧の情報である, こちらも上記の現象を再現しました.fontfamily として JuliaMono を使うと解決できました.という内容です。
これについて解説すると,この時の状況はこの時指定方法がfontfamily="JuliaMono"となっていますが,
JuliaMonoフォントの正式ファイル名はJuliaMono-Regular.ttfなので
正確に指定しようとするとfontfamily="JuliaMono-Regular"でないといけません。
ただ,正確に指定すると日本語グリフがないので日本語は表示されないことは明白です。
この時の状況は「デタラメなフォントファイル名を指定したのでOSのデフォルトフォントで表示されている」というのが正解でしたがって,「fontfamilyとしてJuliaMonoを使うと解決できました」は大嘘。
Julia言語のユーザーは自分に都合のいい事ばかりを信じる傾向にあるので, こういう記事が一番上にくるのだと思います。
genkuroki/日本語フォントをPlotsで使用する方法.ipynb
genkuroki/日本語フォントをPlotsで使用する方法.ipynb
という8年前の記事です。まぁ8年前ならgr()では日本語フォントは使用できなかった。というのは正しいのですが,
今はそうでないのは私の日記を見たら明白だと思います。
まぁこんな腐った記事がネット検索したら上位にくるのはJuliaユーザーに対する害悪以外の何ものでもありません。
Julia の Plots で日本語
私の日記を除くと,この記事が一番正確で感心したJulia の Plots で日本語 という記事。
日本語を使う関数で fontfamily="Helvetica" とか書いてみる。 ただし,正確にそのフォントが使われる保証はない。 フォント名をどのように変えても,「なんとかゴシック」が使われるようだ。
というのはまさに「でたらめなフォント名を指定するとOSデフォルトで表示される」というのを適確に表現しています。
Julia Plotsの早見表
Julia Plotsの早見表というZennの記事です。
フォントファミリーにIPA 明朝を指定すると、ラベルに日本語を使うことが出来ます。
と書いていますが,実際のコードを見るとgr(fontfamily = "IPAMincho")となっているので,デタラメなフォント指定であり,
OSのデフォルトの表示方法で表示されています。正しくはfontfamily="ipam"ですね。
Plots.jl入門
Plots.jl入門の最後のディスカッションのところ,
日本語を使いたい場合はこちらで対応できました.というのは,
でたらめのフォント指定時の挙動です。
まぁ日本語が表示できることには変わりはないですか。
juliaのプロットで日本語を使う方法
juliaのプロットで日本語を使う方法という記事ですが,やはりデタラメのフォント指定時の挙動です。
日本語OSなら日本語は表示できるでしょうが…
gr(fontfamily="IPAMincho")はgr(fontfamily="ipam")が正しいです。
Plots.jlで日本語のラベル名が使えない
Plots.jlで日本語のラベル名が使えないという記事ですが,
plot( ;fontfamily="sans-serif-roman")の"sans-serif-roman"というフォント指定が無効なので,デタラメなフォント指定の時の挙動を示します。
フォント指定としてはsans-serifかserif-romanという指定は有効ですが,
たとえ正確に指定したとしても日本語文字のグリフがないので文字化けします。
ミツバチ天国:ハニーポットを探せ
ミツバチ天国:ハニーポットを探せというブログの記事ですが,gr(fontfamily=”IPA明朝”)なので,これもデタラメなフォント指定の時の挙動を示します。
正確にはgr(fontfamily=”ipam”)ですね。
書籍:実践Julia入門
Julia言語鈍器シリーズの一冊,実践Julia入門です。
12-2-1可視化(データプロット)の基本(p600~)あたりからの記述ですが,
fontfamily="sans-serif-roman"なので,デタラメなフォント指定の時の挙動で,日本語OSなら日本語で表示する感じす。
まぁ2023年3月の発行で,私が気付いたのは2023年中頃,blogで言及しはじめたのは2024年に入ってからなのでまぁしょうがない感じですかね。
svgでは問題なく保存できるのでそこからpdf等に変換すれば実害はない方も多いということなのでしょうか?
まとめ
とりあえず自分が把握している内容は以上です。
なお,OSのTTCフォントを利用する場合は手前味噌ですが,
PlotsGRBackendFontJaEmoji.jlを使ってみるのもいいかもしれません。