1. Attributes with 15 entries:
    2. color => RGBA{Float32}(0.0,0.447059,0.698039,1.0)
    3. colormap => viridis
    4. colorrange => Automatic()
    5. cycle => [:color]
    6. inspectable => true
    7. linestyle => nothing
    8. linewidth => 1.5
    9. marker => Circle
    10. markercolor => Automatic()
    11. markercolormap => viridis
    12. markercolorrange => Automatic()
    13. markersize => 9
    14. strokecolor => black
    15. strokewidth => 0

    或者调用 pltobject.attributes.attributes 返回对象属性的Dict

    对于任一给定的绘图函数,都能在 REPL 中以 ?lineshelp(lines) 的形式获取帮助。Julia将输出该函数的相应属性,并简要说明如何使用该函数。 关于 lines 的例子如下:

    1. help(lines)

    不仅 plot 对象有属性,AxisFigure 对象也有属性。 例如,Figure 的属性有 backgroundcolorresolutionfontfontsize 以及 。 其中 figure_padding 改变了图像周围的空白区域,如图 (图 5) 中的灰色区域所示。 它使用一个数字指定所有边的范围,或使用四个数的元组表示上下左右。

    Axis 同样有一系列属性,典型的有 backgroundcolorxgridcolortitle。 使用 help(Axis) 可查看所有属性。

    在接下来这张图里,我们将设置一些属性:

    1. lines(1:10, (1:10).^2; color=:black, linewidth=2, linestyle=:dash,
    2. figure=(; figure_padding=5, resolution=(600, 400), font="sans",
    3. backgroundcolor=:grey90, fontsize=16),
    4. axis=(; xlabel="x", ylabel="x²", title="title",
    5. xgridstyle=:dash, ygridstyle=:dash))
    6. current_figure()

    Figure 5: Custom plot.

    此例已经包含了大多数用户经常会用到的属性。 或许在图上加一个 legend 会更好,这在有多条曲线时尤为有意义。 所以,向图上 append 另一个 plot object 并且通过调用 axislegend 添加对应的图例。 它将收集所有 plot 函数中的 labels, 并且图例默认位于图的右上角。 本例调用了 position=:ct 参数,其中 :ct 表示图例将位于 centertop, 如图 图 所示:

    1. lines(1:10, (1:10).^2; label="x²", linewidth=2, linestyle=nothing,
    2. figure=(; figure_padding=5, resolution=(600, 400), font="sans",
    3. backgroundcolor=:grey90, fontsize=16),
    4. axis=(; xlabel="x", title="title", xgridstyle=:dash,
    5. scatterlines!(1:10, (10:-1:1).^2; label="Reverse(x)²")
    6. axislegend("legend"; position=:ct)
    7. current_figure()

    Figure 6: Custom plot legend.

    通过组合 left(l), center(c), right(r) 和 还可以再指定其他位置。 例如,使用:lt 指定为左上角。

    然而,仅仅为两条曲线编写这么多代码是比较复杂的。 所以,如果要以相同的样式绘制一组曲线,那么最好指定一个主题。 使用 set_theme!() 可实现该操作,如下所示。

    使用 set_theme!(kwargs)定义的新配置,重新绘制之前的图:

    Figure 7: Set theme example.

    倒数第二行的 set_theme!() 会将主题重置到 Makie 的默认设置。 有关 themes 的更多内容请转到 Section 5.3

    在进入下节前, 值得先看一个例子:将多个参数所组成的 array 传递给绘图函数来配置属性。 例如,使用 scatter 绘图函数绘制气泡图。

    本例随机生成 100 行 3 列的 array ,这些数据满足正态分布。 其中第一列表示 x 轴上的位置,第二列表示 y 轴上的位置,第三列表示与每一点关联的属性值。 例如可以用来指定不同的 color 或者不同的标记大小。气泡图就可以实现相同的操作。

    1. using Random: seed!
    2. seed!(28)
    3. xyvals = randn(100, 3)
    4. xyvals[1:5, :]
    1. 5×3 Matrix{Float64}:
    2. 0.550992 1.27614 -0.659886
    3. -1.06587 -0.0287242 0.175126
    4. -0.721591 -1.84423 0.121052
    5. 0.801169 0.862781 -0.221599
    6. -0.340826 0.0589894 -1.76359

    对应的图 图 如下所示:

    Figure 8: Bubble plot.

    为了在图上添加 LegendColorbar,需将 FigureAxisPlot 元组分解为 fig, ax, pltobj。 我们将在 Section 5.6 讨论有关布局选项的更多细节。

    通过一些基本且有趣的例子,我们展示了如何使用Makie.jl,现在你可能想知道:还能做什么? Makie.jl 都还有哪些绘图函数? 为了回答此问题,我们制作了一个 cheat sheet 如 图 所示。 使用 CairoMakie.jl 后端可以轻松绘制这些图。

    Figure 9: Plotting functions: Cheat Sheet. Output given by Cairomakie.

    Figure 9: Plotting functions: Cheat Sheet. Output given by Cairomakie.

    10 展示了 GLMakie.jl 的_cheat sheet_ ,这些函数支持绘制大多数 3D 图。 这些将在后面的 GLMakie.jl 节进一步讨论。

    Figure 10: Plotting functions: Cheat Sheet. Output given by GLMakie.

    现在,我们已经大致了解到能做什么。接下来应该掉过头来继续研究基础知识。 是时候学习如何改变图的整体外观了。