はじめに
久しぶりの Plots.jl のGRバックエンドのアトリビュートについて説明するこのシリーズ。
今回はfontfamilyを紹介します。
fontfamily アトリビュート
プロット全体のフォントの種類を設定するアトリビュートです。 ただし,それぞれ個別にフォントが設定されると個別の設定の方が有効になります。
それぞれ個別のアトリビュートとfontfamilyは次の図のような関係があります。

使用例はこの日記のPlots.jl関係の記事でもよく使っているので,それを参照していただければよいでしょう。
また,次の質問の解説にも出てきます。
How to use LaTeX Computer Modern font for all text in all plots? (勝手に回答)
今回の質問はHow to use LaTeX Computer Modern font for all text in all plots?。Julia Discourse からの質問です。
これは理屈が分かれば単純なのですが,質問のコードを実行すると意味不明の結果と誰もが思います。
質問のソースを以下に引用します。
using LaTeXStrings using Plots gr() DPI = 150 default( size=(70 * sqrt(2) * DPI / 25.4, 70 * DPI / 25.4), fontfamily="Computer Modern", titlefont=font(12), legend=:topright, legendfont=font(10), tickfont=font(10), linewidth=2, markersize=4, xlabelfont=font(10), ylabelfont=font(10), ) display(plot(title="test"))
フォントの設定はfontfamily="Computer Modern"としか設定していないのに表示画面は次のように
サンセリフ(Sans Serif)体になっているのは何故?という質問です。

これは,font関数がその謎を解く鍵となります。
font関数をREPLから実行すると次のようになります。
julia> font(10)
Plots.Font("sans-serif", 10, :hcenter, :vcenter, 0.0, RGB{N0f8}(0.0,0.0,0.0))
~font=font(~)で設定すると,一度に6つのアトリビュートが設定されます。
その時,指定しないアトリビュートは暗黙の初期値で初期化されます。
fontfamilyの初期値は"sans-serif"つまり,font(10)でサイズだけ設定したと思っても,
実際はフォントの種類をsans-serifで設定していることになるのです。
原理的には次のような感じです。

それぞれfont関数によって"sans-serif"に設定されているので,その設定がfontfamilyの設定より
優先されています。
なので,大元のfontfamilyの設定を生かしたい時にはfont関数を使うのはダメということになります。
ではどうすればいいかというと,素直に~fontsizeのアトリビュートを変更しようということになります。
using LaTeXStrings using Plots gr() default() DPI = 150 default( size=(70 * sqrt(2) * DPI / 25.4, 70 * DPI / 25.4), fontfamily="Computer Modern", titlefontsize=12, legend=:topright, legendfontsize=12, tickfontsize=10, linewidth=2, markersize=4, xguidefontsize=10, yguidefontsize=10, ) display(plot(title="test"))
一度default()を呼んでいるのは,一度設定されたプロパティを初期値に戻すためです。
font()を呼ぶと強制的にsans-serifに設定されるためです。初期値は上位のフォント設定の
参照となっています。
default()を呼ぶと次のような感じになるといえます。

そして,font関数を呼ばず,~sizeを直接指定することで,~fontfamilyの値は上位の設定の
参照のままとなります。

次のような結果が得られます。

さいごに
ttcフォント等を利用される時には,手前味噌ですがPlotsGRBackendFontJaEmoji.jlを使うと簡単に
利用可能です。