@def title = "Home" @def order = 0 @def frontpage = true @def description = "Create impressive data visualizations with Makie, the plotting ecosystem for the Julia language. Build aesthetic plots with beautiful customizable themes, control every last detail of publication quality vector graphics, assemble complex layouts and quickly prototype interactive applications to explore your data live."
Makie is a data visualization ecosystem for the Julia programming language, with high performance and extensibility. It is available for Windows, Mac and Linux.
<input id="hidecode" class="hidecode" type="checkbox">
using GLMakie # All functionality is defined in Makie and every backend re-exports Makie
GLMakie.activate!() # hide
Base.@kwdef mutable struct Lorenz
dt::Float64 = 0.01
σ::Float64 = 10
ρ::Float64 = 28
β::Float64 = 8/3
x::Float64 = 1
y::Float64 = 1
z::Float64 = 1
end
function step!(l::Lorenz)
dx = l.σ * (l.y - l.x)
dy = l.x * (l.ρ - l.z) - l.y
dz = l.x * l.y - l.β * l.z
l.x += l.dt * dx
l.y += l.dt * dy
l.z += l.dt * dz
Point3f(l.x, l.y, l.z)
end
attractor = Lorenz()
points = Observable(Point3f[]) # Signal that can be used to update plots efficiently
colors = Observable(Int[])
set_theme!(theme_black())
fig, ax, l = lines(points, color = colors,
colormap = :inferno, transparency = true,
axis = (; type = Axis3, protrusions = (0, 0, 0, 0),
viewmode = :fit, limits = (-30, 30, -30, 30, 0, 50)))
record(fig, "lorenz.mp4", 1:120) do frame
for i in 1:50
# update arrays inplace
push!(points[], step!(attractor))
push!(colors[], frame)
end
ax.azimuth[] = 1.7pi + 0.3 * sin(2pi * frame / 120) # set the view angle of the axis
notify(points); notify(colors) # tell points and colors that their value has been updated
l.colorrange = (0, frame) # update plot attribute directly
end
set_theme!() # hide
<label for="hidecode" class="hidecode"></label>
\video{lorenz, autoplay = true}
Add one or more of the Makie backend packages GLMakie.jl
(OpenGL), CairoMakie.jl
(Cairo), or WGLMakie.jl
(WebGL), RPRMakie
(RadeonProRender) using Julia's inbuilt package manager. Each backend re-exports Makie
so there's no need to install it separately.
Makie is the core package, and the backends have no user facing functionality. They only render the final result. See the Backends page for more information!
]add GLMakie
using GLMakie
To switch to a different backend, for example CairoMakie
, call CairoMakie.activate!()
.
@@box-container @@box ~~~~~~ @@title Basic Tutorial @@ @@box-content @@description Learn the basics of plotting with Makie. @@ ~~~ ~~~ @@ ~~~~~~ @@
@@box ~~~~~~ @@title Layout Tutorial @@ @@box-content @@description Check out how to make complex plots and layouts. @@ ~~~ ~~~ @@ ~~~~~~ @@
@@
There are four backends, each of which has particular strengths. You can switch between backends at any time.
@@box-container
@@box
~~~~~~
@@title GLMakie.jl@@
@@box-content
@@description
GPU-powered, interactive 2D and 3D plotting in standalone GLFW.jl
windows.
@@
~~~
~~~
@@
~~~~~~
@@
@@box ~~~~~~ @@title WGLMakie.jl @@ @@box-content @@description WebGL-based interactive 2D and 3D plotting that runs within browsers. @@ ~~~ ~~~ @@ ~~~~~~ @@ @@box ~~~~~~ @@title RPRMakie.jl @@ @@box-content @@description Backend using RadeonProRender for raytracing Makie scenes. @@ ~~~ ~~~ @@ ~~~~~~ @@ @@
The differences between backends are explained in more details under \myreflink{Backends}.
These packages and sites are maintained by third parties. If you install packages, keep an eye on version conflicts or downgrades as the Makie ecosystem is developing quickly so things break occasionally.
@@box-container @@box ~~~~~~ @@title AlgebraOfGraphics.jl @@ @@box-content @@description Grammar-of-graphics style plotting, inspired by ggplot2. @@ ~~~ ~~~ @@ ~~~~~~ @@
@@box ~~~~~~ @@title Beautiful Makie @@ @@box-content @@description This third-party gallery contains many advanced examples. @@ ~~~ ~~~ @@ ~~~~~~ @@
@@box ~~~~~~ @@title GraphMakie.jl @@ @@box-content @@description Graphs with two- and three-dimensional layout algorithms. @@ ~~~ ~~~ @@ ~~~~~~ @@
@@box ~~~~~~ @@title GeoMakie.jl @@ @@box-content @@description Geographic plotting utilities including projections. @@ ~~~ ~~~ @@ ~~~~~~ @@ @@
If you use Makie for a scientific publication, please cite our JOSS paper the following way:
Danisch & Krumbiegel, (2021). Makie.jl: Flexible high-performance data visualization for Julia. Journal of Open Source Software, 6(65), 3349, https://doi.org/10.21105/joss.03349
You can use the following BibTeX entry:
@article{DanischKrumbiegel2021,
doi = {10.21105/joss.03349},
url = {https://doi.org/10.21105/joss.03349},
year = {2021},
publisher = {The Open Journal},
volume = {6},
number = {65},
pages = {3349},
author = {Simon Danisch and Julius Krumbiegel},
title = {{Makie.jl}: Flexible high-performance data visualization for {Julia}},
journal = {Journal of Open Source Software}
}
- Use the REPL
?
help mode. - Click this link to open a preformatted topic on the Julia Discourse Page. If you do this manually, please use the category Domain/Visualization and tag questions with
Makie
to increase their visibility. - For casual conversation about Makie and its development, have a look at the Makie Discord Server. Please direct your usage questions to Discourse and not to Slack, to make questions and answers accessible to everybody.
- For technical issues and bug reports, open an issue in the Makie.jl repository which serves as the central hub for Makie and backend issues.