1

有没有办法为一个类型编写一个绘图类型配方T,然后让 Julia 以某种方式推断该类型的相应配方Vector{T}

简单的例子,假设我有一个盒子结构B,我写了一个简单的类型配方来绘制它:

using Plots

struct B x0;x1;y0;y1 end
bshape(b::B) = Shape([b.x0,b.x1,b.x1,b.x0],[b.y0,b.y0,b.y1,b.y1])
@recipe f(::Type{B}, b::B) = bshape(b)

所以现在plot(B(0,1,2,3))像我想要的那样绘制一个填充的矩形。现在假设我有一个Bs 数组,我想通过调用将所有矩形绘制在一个图中plot(bs)。简单地定义类型配方B并不能做到这一点。我可以为这样的向量编写另一种类型的配方B

@recipe f(::Type{Vector{B}}, bs::Vector{B}) = bshape.(bs)

但是,首先,我真的不喜欢这个,它有一些重复的代码。我宁愿能够告诉 Julia 只使用原始类型配方。另外,例如,如果我想让每个框都能够确定有关它如何绘制的其他内容,请说:

@recipe function f(::Type{B}, b::B)
    fillcolor --> (b.x0==0 ? :red : :blue)
    bshape(b)
end

在这一点上,矢量版本,如上所述,不会做我想要的。我可能可以以某种方式对其进行修改,但似乎应该有一种“正确”的方式来做到这一点。

4

0 回答 0