今回はようやく,legend_font
アトリビュートの説明です。
別名
そのものも含めて次の通りです。
legend_font
legend_fonts
legendfont
legendfonts
設定する内容
公式ドキュメントのSubplotアトリビュートを見ると,設定する内容はPlots.Font
型です。
Plots.Font
の定義はPlots.jlのソースのこの辺りで,抜粋すると次のような感じです。
mutable struct Font family::AbstractString pointsize::Int halign::Symbol valign::Symbol rotation::Float64 color::Colorant end
で,halign
とvalign
以外はこれまでに説明したアトリビュートの内容です。
ということはhalign
とvalign
も設定可能なのはずなのですが,
ソースのこの辺り
を見ると,legendの場合halign=:left
,valign=:center
に固定で設定しています。
ここでは少し寄り道してlegend_font_halign
,legend_font_valign
について説明します。
例は分かり易いlegend_font_halign
で紹介します。
とさらにその前に比較用としてPGFPlotsXバックエンドについても少しだけ説明します。 PGFPlotsXも使ってみると結構面白いです。というか目的外使用の遊び場を見つけたというところでしょうか?
PGFPlotsXバックエンドの利用方法
良い子の学生の方(?)ならTeXLiveをインストールしていると思います。ubuntu(Not WSL(2))のライトなTeXユーザーならapt install texlive-full
で脳みそを使わずインストール可能です。
Windowsの場合も別途TexLiveをインストールしてパスを通します。
デフォルトでは日本語は使えないのですが,
PGFPlotsX.CUSTOM_PREAMBLE
に \usepackage{luatexja}
を追加するという裏技(?)が使えます。
ここでは,PGFPlotsX.CUSTOM_PREAMBLE
に直接文字列の配列を設定していますが,
公式ドキュメントではpush!(PGFPlotsX.CUSTOM_PREAMBLE, "文字列")
という感じで利用することが推奨されています。
import PGFPlotsX using Plots pgfplotsx() PGFPlotsX.CUSTOM_PREAMBLE=[] plot(sin; label="正弦波") savefig("pgfplotsx_no_preamble.png")
import PGFPlotsX using Plots pgfplotsx() PGFPlotsX.CUSTOM_PREAMBLE=[raw"\usepackage{luatexja}"] plot(sin; label="正弦波") savefig("pgfplotsx_add_preamble.png")
legend_font_halign
(GRバックエンドでは機能せず)
とりあえず,ほぼ同じソースでhalign
に各パラメータを設定してみます。
import PGFPlotsX using Plots begin gr() plts = [ plot([sin, cos]; legend_font_halign=halign, label=["sinsinsin" "cos"], legend_position=(0.5, 0.5), title=string(halign)) for halign in [:left, :center, :hcenter, :right]] plt = plot(plts...; plot_title="legend_font_halign(GR)") savefig(plt, "legend_font_halign_gr.png") end begin pgfplotsx() plts = [ plot([sin, cos]; legend_font_halign=halign, label=["sinsinsin" "cos"], legend_position=(0.5, 0.5), title=string(halign)) for halign in [:left, :center, :hcenter, :right]] plt = plot(plts...; plot_title="legend_font_halign(PGFPlotsX)") savefig(plt, "legend_font_halign_pgfplotsx.png") end
PGFPlotsXの場合は,短い文字列の位置が変化するのに対し,GRバックエンドでは変化しません。 このあたりには注意が必要ですが,左詰め固定を変更する必要性もあまりないのでは?と思うところではあります。
また,凡例の基準となる座標が,PGFPlotsXは凡例の四角の左上なのに対し,GRでは一つ目の凡例の文字の左真ん中で, バックエンドによって実装の動きが違うのが面白いところです。
Plots.Font
とPlots.font
(GRバックエンド)
Plots.Font
型は複合型で,前述の通り6個の引数を設定する必要があります。
試しにフォントだけ引数に入れて呼び出してみると次のようなエラーが出ます。
julia> myfont = Plots.Font("JuiseeHWSZ-Regular") ERROR: MethodError: no method matching Plots.Font(::String) Closest candidates are: Plots.Font(::AbstractString, ::Int64, ::Symbol, ::Symbol, ::Float64, ::Colorant) @ Plots ~/.julia/packages/Plots/HyyIK/src/components.jl:215 Plots.Font(::Any, ::Any, ::Any, ::Any, ::Any, ::Any) @ Plots ~/.julia/packages/Plots/HyyIK/src/components.jl:215
Plots
にはfont
関数が用意されていて,これを使うとパラメータ指定でFont型を定義できます。
REPLから実行すると次のような感じになります。
julia> myfont = font(family="JuiseeHWSZ-Regular") Plots.Font("JuiseeHWSZ-Regular", 14, :hcenter, :vcenter, 0.0, RGB{N0f8}(0.0,0.0,0.0)) julia> myfont = font(family="JuiseeHWSZ-Regular", pointsize=8, color=:blue) Plots.Font("JuiseeHWSZ-Regular", 8, :hcenter, :vcenter, 0.0, RGB{N0f8}(0.0,0.0,1.0))
設定しないパラメータはデフォルトの値で設定されるようです。pointsize
が14ということはタイトル指定を
想定している動作ですかね。
:hcenter
,:vcenter
は前述の通り凡例では表示に反映されません。
なお,PGFPlotsXは公式ドキュメントでは対応してないということですが,今回の日記では試していません。
使用例
最後に使用例です。といっても,これまでのlegend_font_*
シリーズと何ら変わらないので,
色とサイズだけ変えたものをサンプルにのせます。
using Plots gr() params = [(x, y) for x in [:red, :blue, :green], y in 6:2:12] plts = [plot(sin; label="$(p[1]), $(p[2])", legend_position=(0.1, 0.5), legend_font=font(color=p[1], pointsize=p[2])) for p in params] plt = plot(plts..., plot_title="legend_font", layout=(4, 3), size=(480, 640)) savefig(plt, "legend-font-example.png")