ujimushi(@旧sradjp(15364))の日記

旧スラドの日記の引越先です

title(|location|font(family|size|color|rotation|[vh]align)) (Plots.jl(GR))

全部覚えている訳ではないので,個人的には日常的にすごく役に立っている Plots.jlの個別のアトリビュートの使用例を残すこのシリーズ。 今回は(ようやく)よく使うtitleに関する内容です。

title

titleで図のタイトルの文字列を指定します。 subplotに関するアトリビュートで,全体のタイトルはplot_titleに相当します。

なのでうっかり次のような感じにしてしまうと,全てのsubplotのタイトルがABCDになります。

using Plots
gr()
plts = [plot(sin, title=k) for k in ["A", "B", "C", "D"]]
plot(plts...; title = "ABCD")
savefig("ABCD.png")

最後のplotの時にplot_titleを指定するのが正解です。

using Plots
gr()
plts = [plot(sin, title=k) for k in ["A", "B", "C", "D"]]
plot(plts...; plot_title = "ABCD")
savefig("ABCD_correct.png")

追記(デフォルト)

デフォルトは""(空文字列)です。うっかり,nothing:noneとかを指定すると,文字列に変換して表示してしまうので注意が必要かもしれません。

titlefontfamily

次項以降日本語を表示させる関係上,タイトルのフォントの種類を指定するtitlefontfamilyアトリビュートだけ先に紹介します。

別名はtitlefontfamilysしかありません。使用例を次に示します。

using Plots
gr()
names = [:titlefontfamily, :titlefontfamilys]
props = ["ipam", "ipag"]
plts = [plot(sin; title="タイトル:\n $n = $p", NamedTuple{(n,)}((p,))...) 
    for (n, p) in zip(names, props)]
plot(plts...; layout=(2, 1))
savefig("titlefontfamily.png")

追記(デフォルト)

デフォトルはfontfamilyで指定したものとなり,fontfamilyで指定しない場合はsan-serifです。 しかし,legend_fontfamily等のこれまでの記事の説明でこのことについての記載を忘れているような気がします。

titlelocation

次にタイトルの位置を示すtitlelocationです。 といっても,Plots.jlの場合はタイトルは図の上部にしか指定できません。そのため,titlelocationの指定といっても上部の真ん中か左か右かの三通りです。

面倒なので,別名もサンプルのソースリストの中に提示します。pos_namesの各要素です。 非常に別名数が多いです。 なお,Symbol型なので,実際にソースに記述する時はグラフ上の表示のように titlelocation=:leftのような感じで指定して下さい。

using Plots
gr()
default(titlefontfamily="ipag")

pos_names = [
    :titlelocation, :title_align, :title_alignment,
    :title_loc, :title_location, :title_pos, :title_position,
    :titlealign, :titlealignment,
    :titleloc, :titleloction,
    :titlelocations, :titlepos, :titleposition
]
pos_props = [
    :left, :center, :right,
    :left, :right, :left, :right,
    :left, :right,
    :left, :right,
    :left, :center, :right
]

plts = [plot(sin; title="タイトル:\n $n = $p", NamedTuple{(n,)}((p,))...) 
        for (n, p) in zip(pos_names, pos_props)]
plot(plts..., size=(800, 1100), layout=(7,2))
        
savefig("titlelocation.png")

見て分かる通り,titlefont[vh]alignも同時に変更されているような挙動です。 懸念される(?)のはtitlefont[vh]alignが効くかどうか?,次項で試してみます。

titlefont[vh]align(設定が反映しない)

結論からいうと設定しても変わりません。次のソースで検証してみます。

using Plots
gr()
default(titlefontfamily="ipag")
plops_h = [:left, :center, :right]
plops_v = [:vcenter, :top, :bottom, :center]  

plts = [
    plot(sin; title="タイトル:\n $x, $y", titlefonthalign=x, titlefontvalign=y) 
    for x in plops_h, y in plops_v]
plot(plts..., size=(800, 1100), layout=(4, 3))

savefig("titlefontvhalign.png")

どの指定をしてもcenter扱いになっています。タイトル:のところを比較すれば分かりやすいでしょう。

titlefont(color|size|rotation)

残りのプロパティtitlefontcolortitlefontsizetitlefontrotationです。 基本的に今までのフォント系の設定方法と同じです。

別名は最後にsがついているものしかないので,種類はそれほど多くありません。

使用例を示します。

using Plots
gr()
default(titlefontfamily="ipag", titlefontsize=10)
names = (:titlefontcolor, :titlefontcolors, :titlefontcolor, :titlefontcolors,
         :titlefontsize, :titlefontsizes,
         :titlefontrotation, :titlefontrotation
         )
props = (:red, "blue", colorant"#ff00ff", RGB(0.0, 1.0, 0.0),
         8, 14,
         30.0, 330.0)
plts = [plot(sin; title="タイトル:\n $n = $p", NamedTuple{(n,)}((p,))...) 
    for (n, p) in zip(names, props)]
plot(plts...; layout=(4, 2), size=(800, 1100))
savefig("titlefont_color_size_rotation.png")

自動だと表示範囲をはみ出すので,titlefontrotationは そのままでは使いものにならないような気がします。

色の指定方法自体は以前の記事legend_font_colorとかで説明しているので, そちらの方が説明が分かりやすいかもしれません。

その他気がついたこと

titlefontfというアトリビュートはありません。 そのため,今回の記事で示したアトリビュート属性を変更する必要があります。