Plots.jl examples


These examples are available as Jupyter notebooks. You can execute them online with binder or just view them with nbviewer by clicking on the badges above!

These examples were slightly modified from some of the examples in the Plots.jl documentation and can be used as both a tutorial or as a series of test for Unitful recipes. (they are essentially the same except we have added some units to the data).

First we need to tell Julia we are using Unitful and Plots

using Unitful, Plots


plot(Plots.fakedata(50, 5) * u"m", w=3)

Parametric plots

plot(t -> sin(t)*u"s", t -> sin(2t)*u"m", 0, 2π, line=4, leg=false, fill=(0, :orange))


y = rand(100)*u"km"
plot((0:10:100)*u"hr", rand(11, 4)*u"km", lab="lines", w=3, palette=:grays, fill=0, α=0.6)
scatter!(y, zcolor=abs.(y .- 0.5u"km"), m=(:heat, 0.8, Plots.stroke(1, :green)), ms=10 * abs.(y .- 0.5u"km") .+ 4u"km", lab="grad")


Note that a few changes had to be made for this to work.

using Statistics
y = rand(20, 3)*u"W"
x = (1:size(y,1))*u"Hz"
plot(x, y, xlabel="XLABEL", xlims=(-5, 30), xflip=true, xticks=0:2:20, background_color=RGB(0.2, 0.2, 0.2), leg=false)
hline!(mean(y, dims=1) + rand(1, 3)*u"W", line=(4, :dash, 0.6, [:lightgreen :green :darkgreen]))
vline!([5, 10]*u"Hz")
yaxis!("YLABEL", :log10)


ys = Vector[rand(10), rand(20)] .* u"km"
plot(ys, color=[:black :orange], line=(:dot, 4), marker=([:hex :d], 12, 0.8, Plots.stroke(3, :gray)))

Build plot in pieces

plot(rand(100) / 3 * u"km", reg=true, fill=(0, :green))
scatter!(rand(100) * u"km", markersize=6, c=:orange)


histogram2d(randn(10000) * u"cm", randn(10000) * u"cm", nbins=20)

Line types

linetypes = [:path :steppre :steppost :sticks :scatter]
n = length(linetypes)
x = Vector[sort(rand(20)) for i = 1:n] * u"km"
y = rand(20, n) * u"ms"
plot(x, y, line=(linetypes, 3), lab=map(string, linetypes), ms=15)

Line styles

styles = intersect([:solid, :dash, :dot, :dashdot, :dashdotdot], Plots.supported_styles())
styles = reshape(styles, 1, length(styles))
n = length(styles)
y = cumsum(randn(20, n), dims=1) * u"km"
plot(y, line=(5, styles), label=map(string, styles), legendtitle="linestyle")


Ribbons can be added to lines via the ribbon keyword; you can pass:

  • an array (for symmetric ribbons)
  • a function
  • a number

(Tuple of arrays for upper and lower bounds are currently unsupported.)

x = y = (0:10)*u"m"
    plot(x,y; ribbon = (0:0.5:5)*u"m", label = "Vector"),
    plot(x,y; ribbon = sqrt, label = "Function"),
    plot(x,y; ribbon = 1u"m", label = "Constant"),


The fillrange keyword defines a second line and fills between it and the y data. Note: ribbons are fillranges.

x = y = (0:10)*u"m"
    plot(x,y; fillrange = (0:0.5:5)*u"m", label = "Vector"),
    plot(x,y; fillrange = sin, label = "Function"),
    plot(x,y; fillrange = 0u"m", label = "Constant"),
    link = :all

Marker types

markers = intersect(Plots._shape_keys, Plots.supported_markers())
markers = reshape(markers, 1, length(markers))
n = length(markers)
x = (range(0, stop=10, length=n + 2))[2:end - 1] * u"km"
y = repeat(reshape(reverse(x), 1, :), n, 1)
scatter(x, y, m=(8, :auto), lab=map(string, markers), bg=:linen, xlim=(0, 10), ylim=(0, 10))


bar(randn(99) * u"km")


histogram(randn(1000) * u"km", bins=:scott, weights=repeat(1:5, outer=200))


l = @layout([a{0.1h};b [c;d e]])
plot(randn(100, 5) * u"km", layout=l, t=[:line :histogram :scatter :steppre :bar], leg=false, ticks=nothing, border=:none)

Adding to subplots

plot(Plots.fakedata(100, 10) * u"km", layout=4, palette=[:grays :blues :heat :lightrainbow], bg_inside=[:orange :pink :darkblue :black])

Contour plots