有没有办法为一个类型编写一个绘图类型配方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))
像我想要的那样绘制一个填充的矩形。现在假设我有一个B
s 数组,我想通过调用将所有矩形绘制在一个图中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
在这一点上,矢量版本,如上所述,不会做我想要的。我可能可以以某种方式对其进行修改,但似乎应该有一种“正确”的方式来做到这一点。