还可以使用 set_theme!(theme; kwargs...) 将当前主题改为 theme, 并且通过 kwargs 覆盖或增加一些属性。使用不带参数的 set_theme!() 即可恢复到之前主题的设置。在下面的例子中,我们准备了具有不同样式的测试绘图函数,以便于观察每个主题的大多数属性。

    1. 6×6 Matrix{Float64}:
    2. 0.808288 0.386519 0.355371 0.0365011 -0.0911358 1.8115
    3. -1.12207 -2.47766 -2.16183 -2.49928 -2.02981 -1.37017
    4. -1.10464 -1.03518 -3.19756 -1.18944 -2.71633 -3.80455
    5. -0.416993 -0.534315 -1.42439 -0.659362 -0.0592298 0.644529
    6. 0.287588 1.50687 2.36111 2.54137 0.48751 0.630836
    7. 0.229819 0.522733 0.864515 2.89343 2.06537 2.21375

    本例随机生成了一个大小为 (20,20) 的矩阵,以便于绘制一张热力图(heatmap)。 同时本例也指定了 \(x\) 和 \(y\) 的范围。

    1. using Random: seed!
    2. seed!(13)
    3. xv = yv = LinRange(-3, 0.5, 20)
    4. matrix = randn(20, 20)
    5. matrix[1:6, 1:6] # first 6 rows and columns

    因此,新绘图函数如下所示:

    1. function demo_themes(y, xv, yv, matrix)
    2. fig, _ = series(y; labels=["$i" for i = 1:6], markersize=10,
    3. color=:Set1, figure=(; resolution=(600, 300)),
    4. axis=(; xlabel="time (s)", ylabel="Amplitude",
    5. hmap = heatmap!(xv, yv, matrix; colormap=:plasma)
    6. limits!(-3.1, 8.5, -6, 5.1)
    7. axislegend("legend"; merge=true)
    8. Colorbar(fig[1, 2], hmap)
    9. fig
    10. end

    注意,series 函数的作用是同时绘制多条附带标签的直线图和散点图。另外还绘制了附带 colorbar 的 heatmap。如图所示,有两种暗色主题,一种是 theme_dark() ,另一种是 theme_black()

    1. with_theme(theme_dark()) do
    2. demo_themes(y, xv, yv, matrix)
    3. end
    4. with_theme(theme_black()) do
    5. demo_themes(y, xv, yv, matrix)
    6. end

    Figure 11: Theme dark.

    Figure 12: Theme black.

    另外有三种白色主题,theme_ggplot2()theme_minimal()theme_light()。这些主题对于更标准的出版图很有用。

    Figure 13: Theme ggplot2.

    Figure 14: Theme minimal.

    Figure 14: Theme minimal.

    Figure 15: Theme light.

    1. publication_theme() = Theme(
    2. fontsize=16, font="CMU Serif",
    3. Axis=(xlabelsize=20, xgridstyle=:dash, ygridstyle=:dash,
    4. Legend=(framecolor=(:black, 0.5), bgcolor=(:white, 0.5)),
    5. Colorbar=(ticksize=16, tickalign=1, spinewidth=0.5),
    6. )

    为简单起见,在接下来的例子中使用它绘制 scatterlinesheatmap

    1. function plot_with_legend_and_colorbar()
    2. fig, ax, _ = scatterlines(1:10; label="line")
    3. hm = heatmap!(ax, LinRange(6, 9, 15), LinRange(2, 5, 15), randn(15, 15);
    4. colormap=:Spectral_11)
    5. axislegend("legend"; position=:lt)
    6. Colorbar(fig[1, 2], hm, label="values")
    7. ax.title = "my custom theme"
    8. fig
    9. end

    然后使用前面定义的 Theme,其输出如 (图 16) 所示。

    Figure 16: Themed plot with Legend and Colorbar.

    Figure 16: Themed plot with Legend and Colorbar.

    如果需要在 set_theme!(your_theme)后更改一些设置,那么可以使用 update_theme!(resolution=(500, 400), fontsize=18)。 另一种方法是给 with_theme 函数传递额外的参数:

    1. fig = (resolution=(600, 400), figure_padding=1, backgroundcolor=:grey90)
    2. ax = (; aspect=DataAspect(), xlabel=L"x", ylabel=L"y")
    3. cbar = (; height=Relative(4 / 5))
    4. with_theme(publication_theme(); fig..., Axis=ax, Colorbar=cbar) do
    5. end

    Figure 17: Theme with extra args.