Makie 是一个用于 Julia 编程语言 的交互式数据可视化与绘图生态系统,可在 Windows、Linux 和 Mac 上使用。 后端包 GLMakie、WGLMakie、CairoMakie 和 RPRMakie 提供了不同的功能: 你可以使用 Makie 交互式地探索数据,并在原生窗口或 Web 浏览器中创建简单的 GUI, 导出高质量的矢量图形,甚至使用物理精确的光照进行光线追踪。
Makie 这个名字(我们发音为 Mah-kee)源自日语词 Maki-e,这是一种将金粉和银粉撒在漆器上的技法。 数据是我们这个时代的黄金和白银,所以让我们把它漂亮地铺展在屏幕上吧!
如需了解更多,请访问 docs.makie.org 上的文档。
引用 Makie
如果您在科学出版物中使用 Makie,请通过引用我们的 JOSS 论文](https://joss.theoj.org/papers/10.21105/joss.03349) 以以下方式致谢并支持我们的工作:
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
BibTeX 条目:
@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}
}
或 下载 BibTeX 文件。
社区渠道
我们在 Discord 和 Discourse!社区渠道是你提问和获取帮助的绝佳途径。请加入我们!
安装
选择一个或多个后端包:GLMakie(在原生操作系统窗口中提供交互式 OpenGL)、WGLMakie(在浏览器、IDE、笔记本中提供交互式 WebGL)、CairoMakie(静态 2D 矢量图形和图像)以及 RPRMakie(光线追踪)。 每个后端都会重新导出 Makie.jl 的所有内容,因此你无需显式安装或加载它。
安装:
julia>]
pkg> add GLMakie
检查已安装的版本:
]st GLMakie
开始使用该包:
using GLMakie
开发 Makie
🔥 点击了解更多 🔥
Makie 及其后端均位于 Makie monorepo 中。 这使得跨所有包修改代码变得更加容易。 因此,开发 Makie 几乎与其他 Julia 包一样,只是还需要开发子包:
# local will clone the repository at ./dev/Makie
# Pkg is smart enough to dev the backends at `/dev/Makie/GLMakie` for the below
]dev --local Makie GLMakie CairoMakie WGLMakie RPRMakie
要运行测试,您还应该添加:
]dev dev/Makie/ReferenceTests
有关 ReferenceTests 的更多信息,请查看其 README
示例
以下示例应当不言自明。如需更多信息,请查阅文档!
一个简单的抛物线
x = 1:0.1:10
fig = lines(x, x.^2; label = "Parabola",
axis = (; xlabel = "x", ylabel = "y", title ="Title"),
figure = (; size = (800,600), fontsize = 22))
axislegend(; position = :lt)
save("./images/parabola.png", fig)
fig
一个包含 Unicode 字符和 LaTeX 字符串的更复杂的情节:
显示代码
x = -2pi:0.1:2pi
approx = fill(0.0, length(x))
cmap = [:gold, :deepskyblue3, :orangered, "#e82051"]
with_theme(palette = (; patchcolor = cgrad(cmap, alpha=0.45))) do
fig, axis, lineplot = lines(x, sin.(x); label = L"sin(x)", linewidth = 3, color = :black,
axis = (; title = "Polynomial approximation of sin(x)",
xgridstyle = :dash, ygridstyle = :dash,
xticksize = 10, yticksize = 10, xtickalign = 1, ytickalign = 1,
xticks = (-π:π/2:π, ["π", "-π/2", "0", "π/2", "π"])
))
translate!(lineplot, 0, 0, 2) # move line to foreground
band!(x, sin.(x), approx .+= x; label = L"n = 0")
band!(x, sin.(x), approx .+= -x .^ 3 / 6; label = L"n = 1")
band!(x, sin.(x), approx .+= x .^ 5 / 120; label = L"n = 2")
band!(x, sin.(x), approx .+= -x .^ 7 / 5040; label = L"n = 3")
limits!(-3.8, 3.8, -1.5, 1.5)
axislegend(; position = :ct, backgroundcolor = (:white, 0.75), framecolor = :orange)
save("./images/approxsin.png", fig, size = (800, 600))
fig
end
简单布局:热力图、等高线和 3D 曲面图
显示代码
x = y = -5:0.5:5
z = x .^ 2 .+ y' .^ 2
cmap = :plasma
with_theme(colormap = cmap) do
fig = Figure(fontsize = 22)
ax3d = Axis3(fig[1, 1]; aspect = (1, 1, 1),
perspectiveness = 0.5, azimuth = 2.19, elevation = 0.57)
ax2d = Axis(fig[1, 2]; aspect = 1, xlabel = "x", ylabel="y")
pltobj = surface!(ax3d, x, y, z; transparency = true)
heatmap!(ax2d, x, y, z; colormap = (cmap, 0.65))
contour!(ax2d, x, y, z; linewidth = 2, levels = 12, color = :black)
contour3d!(ax3d, x, y, z; linewidth = 4, levels = 12,
transparency = true)
Colorbar(fig[1, 3], pltobj; label="z", labelrotation=pi)
colsize!(fig.layout, 1, Aspect(1, 1.0))
colsize!(fig.layout, 2, Aspect(1, 1.0))
resize_to_layout!(fig)
save("./images/simpleLayout.png", fig)
fig
end
AlexisRenchon](https://github.com/AlexisRenchon) 的交互式示例:

赞助方
资助编号:01IS10S27,2020