Plot 如何在Julia情节中推送到特定系列?

Plot 如何在Julia情节中推送到特定系列?,plot,julia,Plot,Julia,我想在茱莉亚制作一个卫星环绕地球运行的动画。在这种情况下,地球由一个静止的圆表示,卫星的轨道是从发射点延伸到卫星当前位置的路径 如果我正确理解了这个过程,要在Julia中创建gif,我需要使用带有循环的@gif宏,并在循环的每次迭代中创建下一个gif帧。我一直在尝试绘制地球,然后绘制发射点,然后在每次循环迭代中推送卫星轨道的下一个位置,但它正在将数据推送到地球数据集 我还想制作其他绘图的动画,但是使用多个数据系列的动画示例没有指定任何x值。我需要为每个系列中的每个数据点指定x和y值 如何指定要将

我想在茱莉亚制作一个卫星环绕地球运行的动画。在这种情况下,地球由一个静止的圆表示,卫星的轨道是从发射点延伸到卫星当前位置的路径

如果我正确理解了这个过程,要在Julia中创建gif,我需要使用带有循环的
@gif
宏,并在循环的每次迭代中创建下一个gif帧。我一直在尝试绘制地球,然后绘制发射点,然后在每次循环迭代中推送卫星轨道的下一个位置,但它正在将数据推送到地球数据集

我还想制作其他绘图的动画,但是使用多个数据系列的动画示例没有指定任何x值。我需要为每个系列中的每个数据点指定x和y值


如何指定要将新点推送到的序列?

好吧,在尝试编写一个小示例脚本时,我找到了答案

首先,您可以使用
push非常具体。不能将Int64(或任何其他类型的整数)用作x值或
push
将尝试在x数据指定的“索引”处像数组一样访问绘图。这意味着您必须确保每个输入都是一个浮点值(我没有尝试使用更奇特的数据类型来绘制布尔值,但我认为这也不会很好)

此外,绘图中的x和y(和z)数据不能是
push
不能正常工作,例如StepRangeLen(例如
t=0:10
)。不幸的是,这增加了一层复杂性;如果在绘图中需要使用步距镜头,则必须将它们转换为数组:
t=Array{Float64}(0:10)

最后,最好在每次调用
push时传入尽可能多的x和y值正如您所拥有的系列(如果这一措辞令人尴尬,请参见下面的示例)。Plots软件包的一些示例增加了为多个y值指定一个x值的复杂性,如果两个系列的x值相同,这很好,但如果它们不同,则会成为一个问题

把所有这些放在一起,这里有一个推动不同系列的最小示例:

using Plots

# Let x and z be two different-valued, different-length vectors
x = Array{Float64}(range(0, stop=π, length=30))
z = Array{Float64}(range(0, stop=-π, length=20))
p = plot(x,sin.(x))
plot!(p, z, cos.(z))

# Pushing a single x,y pair goes to the first series:
push!(p, 0.0, -0.5)

# Pushing a single x value and a 2x1 Array sends the x value to
# both series, the first y value to the first series, and the
# second y value to the second series.
push!(p, -0.2, [-0.75, 0.2])
# Note:        comma ^ is important

# Pushing two x values and two y values sends the first x value to
# the first series and the second x value to the second series.
# Same for the y values, which is the same as the previous example
push!(p, [-π/4, π/4], [0.1, 0.2])

# If you want to push only to one series, send a NaN to the others:
push!(p, [NaN, -3π/2], [NaN, 1.0])

display(p)

如果按原样运行,那么情节就相当不连贯。我建议注释掉每一个
push语句并逐个取消注释,以查看其对绘图的影响。

如果您能提供一个迄今为止尝试过的最简单的工作示例,那么这里的人就可以复制粘贴并运行您的代码来修改/改进它,那就太好了。