Engee 文档

包装新类型的现有配方

该页面正在翻译中。

导言

有多种方法可以扩展Makie的功能,例如,用户可以从头开始定义一个全新的绘图类型。 另一个常见的用例是"教"Makie如何为不同的现有配方绘制用户定义的数据结构。

在本教程中,我们将向您展示如何教Makie绘制我们的自定义数据类型 我的手 这是一种简化的直方图类型。

要定义食谱,只需要使用 马基科。jl,这是特别方便的,当你是一个包开发者,并希望避免依赖于完整的Makie。jl. 出于演示目的,本教程将使用 凯罗玛基。jl 在我们走的时候想象事物。

using MakieCore, CairoMakie

struct MyHist
    bincounts
    bincenters
end

我们的目标类型是 我的手,其具有两个字段,如上所定义。 粗略地说,当我们绘制直方图时,我们正在谈论绘制条形图,其中 保险人 告诉我们在哪里画这些酒吧和 [医]帐目 告诉我们每个酒吧有多高。

BarPlot配方—​扩展 麦琪转换/转换

我们要教Makie画的第一个食谱是 巴普洛(). 正如我们以前所说,我们在 我的手 类型基本上告诉我们如何将其绘制为条形图。 Makie公开了这种类型的自定义的以下方法:

Makie.convert_arguments(P::Type{<:BarPlot}, h::MyHist) = convert_arguments(P, h.bincenters, h.bincounts)

</无翻译>

h = MyHist([1, 10, 100], 1:3)

barplot(h)
4350b4f

Hist配方—​复盖 麦琪阴谋!

我们要为我们定制的第二个配方 我的手 类型是 Hist() 食谱。 这是无法通过以下方式实现的 转换/转换 正如我们所做的那样 巴普洛(),因为通常 麦琪hist() 将原始数据作为输入,但我们已经在我们的 我的手 类型。

人们可能会尝试的第一件事是复盖 阴谋! 的方法 Hist 食谱: </无翻译>

function Makie.plot!(plot::Hist{<:Tuple{<:MyHist}})
    barplot!(plot, plot[1])
    plot
end
h = MyHist([1, 10, 100], 1:3)
hist(h; color=:red, direction=:x)
7d7a829

这几乎有效,但我们看到关键字参数没有传递给 巴普洛! 函数。 为了正确处理这些属性,我们需要复盖/合并底层绘图类型的默认属性(在本例中, [医]条形图)与用户传递的属性。 自Makie0.21起, 共享_属性 是针对此用例引入的,它提取目标绘图类型的所有有效属性: </无翻译>

function Makie.plot!(plot::Hist{<:Tuple{<:MyHist}})
    # Only forward valid attributes for BarPlot
    valid_attributes = Makie.shared_attributes(plot, BarPlot)
    barplot!(plot, valid_attributes, plot[1])
end
h = MyHist([1, 10, 100], 1:3)
hist(h; color=:red, direction=:x)
3fd733d