5.4 使用 LaTeXStrings.jl

通过调用 LaTeXStrings.jlMakie.jl 实现了对 LaTeX 的支持:

using LaTeXStrings

一个简单的基础用法例子如下所示 (图 18),其主要包含用于 x-y 标签和图例的 LaTeX 字符串。

function LaTeX_Strings()
    x = 0:0.05:4π
    lines(x, x -> sin(3x) / (cos(x) + 2) / x; label=L"\frac{\sin(3x)}{x(\cos(x)+2)}",
        figure=(; resolution=(600, 400)), axis=(; xlabel=L"x"))
    lines!(x, x -> cos(x) / x; label=L"\cos(x)/x")
    lines!(x, x -> exp(-x); label=L"e^{-x}")
    limits!(-0.5, 13, -0.6, 1.05)
    axislegend(L"f(x)")
    current_figure()
end
with_theme(LaTeX_Strings, publication_theme())
Figure 18: Plot with LaTeX strings.

下面是更复杂的例子,图中的text是一些等式,并且图例编号随着曲线数增加:

function multiple_lines()
    x = collect(0:10)
    fig = Figure(resolution=(600, 400), font="CMU Serif")
    ax = Axis(fig[1, 1], xlabel=L"x", ylabel=L"f(x,a)")
    for i = 0:10
        lines!(ax, x, i .* x; label=latexstring("$(i) x"))
    end
    axislegend(L"f(x)"; position=:lt, nbanks=2, labelsize=14)
    text!(L"f(x,a) = ax", position=(4, 80))
    fig
end
multiple_lines()
Figure 19: Multiple lines.

但不太好的是,一些曲线的颜色是重复的。 添加标记和线条类型通常能解决此问题。 所以让我们使用 Cycles 来添加标记和线条类型。 设置 covary=true,使所有元素一起循环:

function multiple_scatters_and_lines()
    x = collect(0:10)
    cycle = Cycle([:color, :linestyle, :marker], covary=true)
    set_theme!(Lines=(cycle=cycle,), Scatter=(cycle=cycle,))
    fig = Figure(resolution=(600, 400), font="CMU Serif")
    ax = Axis(fig[1, 1], xlabel=L"x", ylabel=L"f(x,a)")
    for i in x
        lines!(ax, x, i .* x; label=latexstring("$(i) x"))
        scatter!(ax, x, i .* x; markersize=13, strokewidth=0.25,
            label=latexstring("$(i) x"))
    end
    axislegend(L"f(x)"; merge=true, position=:lt, nbanks=2, labelsize=14)
    text!(L"f(x,a) = ax", position=(4, 80))
    set_theme!() # reset to default theme
    fig
end
multiple_scatters_and_lines()
Figure 20: Multiple Scatters and Lines.

一张出版质量的图如上所示。 那我们还能做些什么操作? 答案是还可以为图定义不同的默认颜色或者调色盘。 在下一节,我们将再次了解如何使用 Cycles 以及有关它的更多信息,即通过添加额外的关键字参数就可以实现前面的操作。



CC BY-NC-SA 4.0 Jose Storopoli, Rik Huijzer, Lazaro Alonso, 刘贵欣 (中文翻译), 田俊 (中文审校)