Project.toml
or Manifest.toml
files. You can also download the entire folder as a tar.gz or a zip file.
This tutorial will give some examples of plotting and plotting features in Julia, as well as providing references to some relevant resources. The main plotting library is Plots.jl
, but there are some others that provide useful features.
Plots.jl
useful tips
Plots.jl
examples
using Pkg
Pkg.activate("_literate/julia-plots")
Pkg.instantiate()
using Plots
To generate a basic line plot, use plot
.
y = rand(5)
plot(y, label="original data", legend=:topright)
There's a lot of customization here that can occur, a lot of which is discussed in the docs or can be found with some Googling.
Now we can add some other lines and point markers.
y2 = rand(5)
y3 = rand(5)
plot!(y2, label="new data")
scatter!(y3, label="even more data")
Remember that an exclamation mark (!) at the end of a function name means that function modifies an object in-place, so plot!
and scatter!
modify the current plotting object, they don't create a new plot.
Sometimes we want to remove legends, axes, grid lines, and ticks.
plot!(legend=false, axis=false, grid=false, ticks=false)
If we want to have a square aspect ratio, use ratio = 1
.
v = rand(5)
plot(v, ratio=1, legend=false)
scatter!(v)
A heatmap is effectively a plotted matrix with colors chosen according to the values. Use clim
to specify a fixed range for the color limits.
A = rand(10, 10)
heatmap(A, clim=(0, 1), ratio=1, legend=false, axis=false, ticks=false)
M = [ 0 1 0; 0 0 0; 1 0 0]
whiteblack = [RGBA(1,1,1,0), RGB(0,0,0)]
heatmap(c=whiteblack, M, aspect_ratio = 1, ticks=.5:3.5, lims=(.5,3.5), gridalpha=1, legend=false, axis=false, ylabel="i", xlabel="j")
using Colors
mycolors = [colorant"lightslateblue",colorant"limegreen",colorant"red"]
A = [i for i=50:300, j=1:100]
heatmap(A, c=mycolors, clim=(1,300))
y = rand(10)
plot(y, fillrange= y.*0 .+ .5, label= "above/below 1/2", legend =:top)
x = LinRange(0,2,100)
y1 = exp.(x)
y2 = exp.(1.3 .* x)
plot(x, y1, fillrange = y2, fillalpha = 0.35, c = 1, label = "Confidence band", legend = :topleft)
x = -3:.01:3
areaplot(x, exp.(-x.^2/2)/√(2π),alpha=.25,legend=false)
M = [1 2 3; 7 8 9; 4 5 6; 0 .5 1.5]
areaplot(1:3, M, seriescolor = [:red :green :blue ], fillalpha = [0.2 0.3 0.4])
using SpecialFunctions
f = x->exp(-x^2/2)/√(2π)
δ = .01
plot()
x = √2 .* erfinv.(2 .*(δ/2 : δ : 1) .- 1)
areaplot(x, f.(x), seriescolor=[ :red,:blue], legend=false)
plot!(x, f.(x),c=:black)
rectangle(w, h, x, y) = Shape(x .+ [0,w,w,0], y .+ [0,0,h,h])
circle(r,x,y) = (θ = LinRange(0,2π,500); (x.+r.*cos.(θ), y.+r.*sin.(θ)))
plot(circle(5,0,0), ratio=1, c=:red, fill=true)
plot!(rectangle(5*√2,5*√2,-2.5*√2,-2.5*√2),c=:white,fill=true,legend=false)
The StatsPlots.jl
package is very useful for making various plots of probability distributions.
using Distributions, StatsPlots
plot(Normal(2, 5))
scatter(LogNormal(0.8, 1.5))
We can also use this functionality to plot distributions of data in tabular data structures like DataFrames
.
using DataFrames
dat = DataFrame(a = 1:10, b = 10 .+ rand(10), c = 10 .* rand(10))
@df dat density([:b :c], color=[:black :red])
pl = plot(1:4,[1, 4, 9, 16])
pl.attr
pl.series_list[1]
pl[:size]=(300,200)
pl
xx = .1:.1:10
plot(xx.^2, xaxis=:log, yaxis=:log)
plot(exp.(x), yaxis=:log)