gpt4 book ai didi

Julia:尝试添加 slider 时出现 "Plot not defined"

转载 作者:行者123 更新时间:2023-12-05 02:35:04 24 4
gpt4 key购买 nike

我正在学习如何使用 slider 创建绘图。这是我的代码基于 this tutorial 的第一个例子

using Plots
gr()
using GLMakie

function plotLaneEmden(log_delta_xi=-4, n=3)
fig = Figure()

ax = Axis(fig[1, 1])

sl_x = Slider(fig[2, 1], range = 0:0.01:4.99, startvalue = 3)
sl_y = Slider(fig[1, 2], range = -6:0.01:0.1, horizontal = false, startvalue = -2)

point = lift(sl_x.value, sl_y.value) do n, log_delta_xi
Point2f(n, log_delta_xi)
end

plot(n, 1 .- log_delta_xi.^2/6, linecolor = :green, label="n = $n")

xlabel!("ξ")
ylabel!("θ")
end

plotLaneEmden()

当我运行它时,它给出了 UndefVarError: plot not defined。我在这里缺少什么?

最佳答案

看起来您正在尝试混合搭配 Plots.jl 和 Makie.jl。具体来说,您链接中的示例完全适用于 Makie(具体来说,使用 GLMakie 后端),而您尝试添加的 plot 函数使用特定于 的 Plots.jl 版本的语法plot(特别包括 linecolorlabel 关键字参数)。

Plots.jl 和 Makie.jl 是两个独立且不相关的绘图库,因此您必须选择一个并坚持使用。由于这两个库都导出了一些相同的函数名称,因此如果不消除歧义,同时使用这两个库将导致歧义和 UndefVarError

另一个潜在的问题是,看起来您正在尝试制作只有一个 x 和 y 值的线图(nlog_delta_xi 都是单个数字在您编写的代码中)。如果那是你想要的,你需要一个散点图而不是线图;如果这不是您想要的,您需要以某种方式制作这些变量向量。

根据您的具体需求,您可以尝试更多类似的方法(在新 session 中,仅使用 Makie 而不是 Plots):

using GLMakie

function plotLaneEmden(log_delta_xi=-4, n=3)
fig = Figure()

ax = Axis(fig[1, 1], xlabel="ξ", ylabel="θ")

sl_x = Slider(fig[2, 1], range = 0:0.01:4.99, startvalue = n)
sl_y = Slider(fig[1, 2], range = -6:0.01:0.1, horizontal = false, startvalue = log_delta_xi)

point = lift(sl_x.value, sl_y.value) do n, log_delta_xi
Point2f(n, 1 - log_delta_xi^2/6)
end

sca = scatter!(point, color = :green, markersize = 20)

axislegend(ax, [sca], ["n = $n"])
fig
end

plotLaneEmden()

或者,下面是一个交互式绘制线而不是点的简单示例:

using GLMakie

function quadraticsliders(x=-5:0.01:5)
fig = Figure()

ax = Axis(fig[1, 1], xlabel="X", ylabel="Y")

sl_a = Slider(fig[2, 1], range = -3:0.01:3, startvalue = 0.)
sl_b = Slider(fig[1, 2], range = -3:0.01:3, horizontal = false, startvalue = 0.)

points = lift(sl_a.value, sl_b.value) do a, b
Point2f.(x, a.*x.^2 .+ b.*x)
end

l = lines!(points, color = :blue)

onany((a,b)->axislegend(ax, [l], ["$(a)x² + $(b)x"]), sl_a.value, sl_b.value)

limits!(ax, minimum(x), maximum(x), -10, 10)

fig
end

quadraticsliders()

Makie.jl sliders for a quadratic equation

预计到达时间:一些更接近您可能正在寻找的示例

关于Julia:尝试添加 slider 时出现 "Plot not defined",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70636773/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com