Plot 如何使用Makie';s流程图?

Plot 如何使用Makie';s流程图?,plot,julia,julia-gpu,Plot,Julia,Julia Gpu,我一直在尝试绘制一个简单的函数: v(x, y) = (y*t, 2*x*t) v(x::Point2{T}, t) where T = Point2{T}(one(T) * x[2] * t, 4 * x[1]) (实际实现:v(x::Point2{T},T),其中T=Point2{T}(一(T)*x[2]*T,4*x[1])) 使用Makie的2D streamplot函数 虽然我可以单独绘制每个时间步,但通过创建一个匿名函数f=x->v(x,5e0)(例如)并绘制f,当我尝试将其包装到

我一直在尝试绘制一个简单的函数:

v(x, y) = (y*t, 2*x*t)
v(x::Point2{T}, t) where T = Point2{T}(one(T) * x[2] * t, 4 * x[1])
(实际实现:
v(x::Point2{T},T),其中T=Point2{T}(一(T)*x[2]*T,4*x[1])

使用Makie的2D streamplot函数

虽然我可以单独绘制每个时间步,但通过创建一个匿名函数
f=x->v(x,5e0)
(例如)并绘制
f
,当我尝试将其包装到一个可观察对象中(使用
节点(f)
)时,我无法再更新该可观察对象以指向另一个函数,因此我的记录循环失败

我已经尝试强制节点的类型更抽象(
Node{Function}
)。不幸的是,这种抽象类型似乎在Makie的内部某个地方丢失了,因此丢失了


有没有什么方法可以包装我的类型,这样就不会遇到类型冲突,但仍然是一个函数?

因此,有一个可爱的基本方法
Fix2(函数,参数)
,它基本上解决了我的问题(因为它返回一个包装的类型)

考虑以下示例函数:

v(x, y) = (y*t, 2*x*t)
v(x::Point2{T}, t) where T = Point2{T}(one(T) * x[2] * t, 4 * x[1])
可以通过以下方式创建时间设置为1.0的可调用函数:

fixedfunc = Base.Fix2(v, 1.0)
然后可以将其加载到可观察对象中,并进行更新以获得新的时间值,而不会出现问题

以下是最终代码,供参考:

v(x::Point2{T}, t) where T = Point2{T}(one(T) * x[2] * t, 4 * x[1])
sf = Node(Base.Fix2(v, 0e0))

title_str = Node("t = 0.00")

sp = streamplot(
        sf,
        -2..2, -2..2;
        linewidth = 2,
        padding = (0, 0),
        arrow_size = 0.09,
        colormap =:magma
    )

sc = title(sp, title_str)

record(sc, "test.mp4", LinRange(0, 20, 5*30)) do i
  sf[] = Base.Fix2(v, i)
  title_str[] = "t = $(round(i; sigdigits = 2))"
end

哇,整个makie.jl软件包看起来非常棒:)!