包装新类型的现有配方
|
该页面正在翻译中。 |
导言
有多种方法可以扩展Makie的功能,例如,用户可以从头开始定义一个全新的绘图类型。 另一个常见的用例是"教"Makie如何为不同的现有配方绘制用户定义的数据结构。
在本教程中,我们将向您展示如何教Makie绘制我们的自定义数据类型 我的手 这是一种简化的直方图类型。
要定义食谱,只需要使用 马基科。jl,这是特别方便的,当你是一个包开发者,并希望避免依赖于完整的Makie。jl. 出于演示目的,本教程将使用 凯罗玛基。jl 在我们走的时候想象事物。
using MakieCore, CairoMakie
struct MyHist
bincounts
bincenters
end
我们的目标类型是 我的手,其具有两个字段,如上所定义。 粗略地说,当我们绘制直方图时,我们正在谈论绘制条形图,其中 保险人 告诉我们在哪里画这些酒吧和 [医]帐目 告诉我们每个酒吧有多高。
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)
这几乎有效,但我们看到关键字参数没有传递给 巴普洛! 函数。 为了正确处理这些属性,我们需要复盖/合并底层绘图类型的默认属性(在本例中, [医]条形图)与用户传递的属性。 自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)