元々plt=plot(sin); plt.attr[:backdround_color]
がRGBA{Float64}(1.0, 1.0, 1.0, 1.0)
だった
ところから確認したら分かったことを元に書きますが,基本はアトリビュートの紹介です。
今回紹介するAttribute一覧
次の通りですが,legend_background_color
は一度紹介しており,再登場です。
background_color (Plot Attributes)
background_color_outside (Plot Attributes)
background_color_inside (Subplot Attributes)
background_color_subplot (Subplot Attributes)
legend_background_color (Subplot Attributes)
別名
多いです。としか…
background_color
background
background_colors
background_colour
backgroundcolors
backgroundcolour
bg
bg_color
bg_colour
bgcolor
bgcolour
background_color_outside
background_color_outsides
background_colour_outside
background_outside
backgroundcoloroutsides
backgroundcolouroutside
backgroundoutside
bg_color_outside
bg_colour_outside
bg_outside
bgcolor_outside
bgcoloroutside
bgcolour_outside
bgcolouroutside
bgoutside
background_color_inside
background_color_insides
background_colour_inside
background_inside
backgroundcolorinsides
backgroundcolourinside
backgroundinside
bg_color_inside
bg_colour_inside
bg_inside
bgcolor_inside
bgcolorinside
bgcolour_inside
bgcolourinside
bginside
background_color_subplots
background_color_subplots
background_colour_subplot
background_subplot
backgroundcolorsubplots
backgroundcoloursubplot
backgroundsubplot
bg_color_subplot
bg_colour_subplot
bg_subplot
bgcolor_subplot
bgcolorsubplot
bgcolour_subplot
bgcoloursubplot
bgsubplot
legend_color_subplots
legend_((foreground|background)_color|column)(Plots.jl(GR))
を参照。
使用例
別名が多いので,本当に別名が使えるのかの確認をやっていきます。
bakcground_color
Plot Attribute
なので,別名毎に一つずつ描いて合成しています。
using Plots using TikzPictures import GR gr() my_node(names, n) = (n in eachindex(names) ? "\\node {\\includegraphics[width=81.28mm]{$(names[n]).png}};" : "") bgcnames = [:background_color, :background, :background_colors, :background_colour, :backgroundcolors, :backgroundcolour, :bg, :bg_color, :bg_colour, :bgcolor, :bgcolour] for n in bgcnames plot(sin; title="$n=:cyan", size=(320, 200), (;n => :cyan,)...) savefig("$n.png") end io = IOBuffer() println(io, "\\node[matrix] {") for k in 0:3 print(io, "$(my_node(bgcnames, k*3+1)) & ") print(io, "$(my_node(bgcnames, k*3+2)) & ") println(io, "$(my_node(bgcnames, k*3+3)) \\\\") end println(io, "};") tp_bgc = TikzPicture( String(take!(io)), preamble=""" \\usepackage{luatexja} \\usepackage{graphicx} """) save(SVG("background_color_all"), tp_bgc) run(`inkscape -w 1024 -o background_color_all.png background_color_all.svg`)
別名は全てうまく動いているようです。それぞれプロット全体の背景の色が変更されます。
bakcground_color_outside
名前から外側の背景の設定と想像されます。下の例から想像通りの挙動となっているようです。
using Plots using TikzPictures import GR gr() my_node(names, n) = (n in eachindex(names) ? "\\node {\\includegraphics[width=81.28mm]{$(names[n]).png}};" : "") bgconames = [ :background_color_outside, :background_color_outsides, :background_colour_outside, :background_outside, :backgroundcoloroutsides, :backgroundcolouroutside, :backgroundoutside, :bg_color_outside, :bg_colour_outside, :bg_outside, :bgcolor_outside,:bgcoloroutside, :bgcolour_outside, :bgcolouroutside, :bgoutside ] for n in bgconames plot(sin; title="$n=:cyan", size=(320, 200), titlefontsize=12, (;n => :cyan,)...) savefig("$n.png") end println(io, "\\node[matrix] {") for k in 0:4 print(io, "$(my_node(bgconames, k*3+1)) & ") print(io, "$(my_node(bgconames, k*3+2)) & ") println(io, "$(my_node(bgconames, k*3+3)) \\\\") end println(io, "};") tp_bgco = TikzPicture( String(take!(io)), preamble=""" \\usepackage{luatexja} \\usepackage{graphicx} """) save(SVG("background_color_outside_all"), tp_bgco) run(`inkscape -w 1024 -o background_color_outside_all.png background_color_outside_all.svg`)
bakcground_color_inside
Subplot Attribute
なので,一つのグラフでまとめて描画します。
using Plots using TikzPictures import GR gr() bgcinames = [ :background_color_inside, :background_color_insides, :background_colour_inside, :background_inside, :backgroundcolorinsides, :backgroundcolourinside, :backgroundinside, :bg_color_inside, :bg_colour_inside, :bg_inside, :bgcolor_inside, :bgcolorinside, :bgcolour_inside, :bgcolourinside, :bginside ] plt_bgci = plot( [plot(sin; title="$n=:cyan", (;n => :cyan, :titlefontsize => 12)...) for n in bgcinames]..., size=(1024, 1280), layout=(5, 3)) savefig(plt_bgci, "background_color_inside_all.png")
グラフ描画領域の内側の背景の設定のようです。
bakcground_color_subplot
using Plots using TikzPictures import GR gr() bgcsnames = [ :background_color_subplots, :background_color_subplots, :background_colour_subplot, :background_subplot, :backgroundcolorsubplots, :backgroundcoloursubplot, :backgroundsubplot, :bg_color_subplot, :bg_colour_subplot, :bg_subplot, :bgcolor_subplot, :bgcolorsubplot, :bgcolour_subplot, :bgcoloursubplot, :bgsubplot ] plt_bgcs = plot( [plot(sin; title="$n=:cyan", (;n => :cyan, :titlefontsize => 12)...) for n in bgcsnames]..., size=(1024, 1280), layout=(5, 3)) savefig(plt_bgcs, "background_color_subplot_all.png")
設定してみると,background_color_inside
との違いが分かりません。
どちらかを設定するといいのでしょうか?
透明・半透明
背景色はアルファチャンネルのAttributeがないので, 透明・半透明を指定するにはアルファチャンネルを含んだ色を設定する必要があります。
using Plots import GR gr() plt_透明 = plot( sin; plot_title="背景透明", title="background_color=RGBA(1.0, 1.0, 1.0, 0.0)", background_color=RGBA(1.0, 1.0, 1.0, 0.0), plot_titlefontfamily="ipag") savefig(plt_透明, "背景透明.png")
Plots.jlの背景を透明にする(Zenn)では黒が透明になるとの情報があるのですが, 今はうまく動いているように見えます。
using Plots import GR gr() plt_trans = plot( sin; plot_title="背景透明2", title="background_color=:transparent", background_color=:transparent, plot_titlefontfamily="ipag") savefig(plt_trans, "transparent.png")
次は半透明の例です。colorant"色名"
や,RGBA(RGB(...), α)とかを利用すると設定しやすいと思います。
using Plots import GR gr() plt_半透明 = plot( sin; plot_title="背景半透明", title="background_color=RGBA(colorant\"white\", 0.5)", background_color=RGBA(colorant"white", 0.5), plot_titlefontfamily="ipag") savefig(plt_半透明, "背景半透明.png")
どうも全体の背景を白の半透明にすると,Plots.jl側で勝手に色を変えているようです。 不思議。
凡例の背景のように個別に設定するとはっきりそこだけ変更されますね。
using Plots import GR gr() plt_凡例半透明 = plot( sin; plot_title="凡例半透明", title="legend_background_color=RGBA(colorant\"yellow\", 0.5)", legend_background_color=RGBA(colorant"yellow", 0.5), plot_titlefontfamily="ipag", legend_position=(0.52, 0.5), titlefontsize=12) savefig(plt_凡例半透明, "凡例半透明.png")
凡例の場合は背景透明を利用すると,外枠も消して見かけを変えることができます。
using Plots import GR gr() plt_凡例透明 = plot( sin; plot_title="凡例透明", title="legend_background_color=RGBA(1.0, 1.0, 1.0, 0.0)\nlegend_foreground_color=nothing", legend_background_color=RGBA(1.0, 1.0, 1.0, 0.0), legend_foreground_color=nothing, legend_position=(0.52, 0.5), plot_titlefontfamily="ipag") savefig(plt_凡例透明, "凡例透明.png")
おまけ
pngファイルの純粋な白を透明にするとかは次のようにしたらできるかもしれません。 ただし,全ての色が不透明であることを前提に動いているので,うまくいかないケースも多々あると思います。
using Colors using FileIO img = FileIO.load("凡例透明.png") img_alpha = RGBA.(img, 1.0) img_alpha[img_alpha .== RGBA{Colors.N0f8}(1.0,1.0,1.0,1.0)] .= RGBA(colorant"white", 0.0) FileIO.save("透明化例.png", img_alpha)