PyPlot and Plots

黒木玄

2018-01-29

PyPlot.jl によるプロットと Plots.jl によるプロットを比較してみる.

注意

import PyPlotusing PyPlot に変えれば PyPlot. を省略できる. これは Plots についても同様である. しかし, using PyPlotusing Plots は両立しないので注意せよ.

警告: 筆者は特に Plots.jl の経験が浅く, よく理解していない部分が多数ある.

ファイルの表示用函数

In [1]:
displayfile(mime, file) = open(file) do f
    base64 = base64encode(f)
    display("text/html", """<img src="data:$mime;base64,$base64">""")
end
Out[1]:
displayfile (generic function with 1 method)

PyPlot.plot と Plots.plot

In [2]:
import PyPlot
PyPlot.plt[:style][:use]("default")
PyPlot.rc("figure", titlesize=10)
PyPlot.rc("lines", linewidth=1)
PyPlot.rc("lines", markersize=5)
PyPlot.rc("axes", grid=true)
PyPlot.rc("axes", labelsize=10)
PyPlot.rc("grid", linestyle=":")
PyPlot.rc("xtick", labelsize=8)
PyPlot.rc("ytick", labelsize=8)
PyPlot.rc("legend", fontsize=8)

srand(12345)
N = 20
PyPlot.figure(figsize=(5,5))
PyPlot.plot(rand(N), rand(N), label="1", marker="o")
PyPlot.plot(rand(N), rand(N), label="2", marker="^", ls="--")
PyPlot.plot(rand(N), rand(N), label="3", marker="s", ls="-.")
PyPlot.legend()
PyPlot.xlim(-0.05, 1.05)
PyPlot.ylim(-0.05, 1.05)
PyPlot.xlabel("x")
PyPlot.ylabel("y")
PyPlot.axes()[:set_aspect]("equal")
PyPlot.title("2-dimensional uniform distribution")
Out[2]:
PyObject Text(0.5,1,'2-dimensional uniform distribution')
In [3]:
import Plots
Plots.reset_defaults()
Plots.pyplot(
    legend=false,
    titlefont=Plots.font("sans-serif", 12),
    legendfont=Plots.font("sans-serif", 8),
    guidefont=Plots.font("sans-serif", 10),
    tickfont=Plots.font("sans-serif", 8),
    markersize=5,
    markerstrokewidth=0,
)

srand(12345)
N = 20
Plots.plot(size=(450, 450))
Plots.plot!(rand(N), rand(N), label="1", marker=:circle)
Plots.plot!(rand(N), rand(N), label="2", marker=:utriangle, ls=:dash)
Plots.plot!(rand(N), rand(N), label="3", marker=:square,    ls=:dashdot)
Plots.plot!(legend=true)
Plots.plot!(xlim=(-0.05, 1.05))
Plots.plot!(ylim=(-0.05, 1.05))
Plots.plot!(xlabel="x")
Plots.plot!(ylabel="y")
Plots.plot!(aspect_ratio=1)
Plots.title!("2-dimensional uniform distribution")
Out[3]:
In [4]:
import Plots
Plots.reset_defaults()
Plots.gr(
    legend=false,
    titlefont=Plots.font("sans-serif", 12),
    legendfont=Plots.font("sans-serif", 8),
    guidefont=Plots.font("sans-serif", 10),
    tickfont=Plots.font("sans-serif", 8),
    markersize=5,
    markerstrokewidth=0,
)

srand(12345)
N = 20
Plots.plot(size=(450, 450))
Plots.plot!(rand(N), rand(N), label="1", marker=:circle)
Plots.plot!(rand(N), rand(N), label="2", marker=:utriangle, ls=:dash)
Plots.plot!(rand(N), rand(N), label="3", marker=:square,    ls=:dashdot)
Plots.plot!(legend=true)
Plots.plot!(xlim=(-0.05, 1.05))
Plots.plot!(ylim=(-0.05, 1.05))
Plots.plot!(xlabel="x")
Plots.plot!(ylabel="y")
Plots.plot!(aspect_ratio=1)
Plots.title!("2-dimensional uniform distribution")
Out[4]:
0.00 0.25 0.50 0.75 1.00 0.00 0.25 0.50 0.75 1.00 2-dimensional uniform distribution x y 1 2 3
In [5]:
import Plots
Plots.reset_defaults()
#Plots.plotlyjs(
Plots.plotly(
    legend=false,
    titlefont=Plots.font("sans-serif", 12),
    legendfont=Plots.font("sans-serif", 8),
    guidefont=Plots.font("sans-serif", 10),
    tickfont=Plots.font("sans-serif", 8),
    markersize=5,
    markerstrokewidth=0,
)

srand(12345)
N = 20
Plots.plot(size=(500,420))
Plots.plot!(rand(N), rand(N), label="1", marker=:circle)
Plots.plot!(rand(N), rand(N), label="2", marker=:utriangle, ls=:dash)
Plots.plot!(rand(N), rand(N), label="3", marker=:square,    ls=:dashdot)
Plots.plot!(legend=true)
Plots.plot!(xlim=(-0.05, 1.05))
Plots.plot!(ylim=(-0.05, 1.05))
Plots.plot!(xlabel="x")
Plots.plot!(ylabel="y")
Plots.plot!(aspect_ratio=0.85)
Plots.title!("2-dimensional uniform distribution")