gpt4 book ai didi

python - Markevery 的 FuncAnimation 难度

转载 作者:太空宇宙 更新时间:2023-11-03 15:26:29 32 4
gpt4 key购买 nike

我想顺序绘制一系列 x,y 坐标,同时清楚地标记指定的坐标。似乎“markevery”允许用户在 matplotlib 图中执行此操作,但是,当我在动画中提供此属性时,我收到错误“ValueError: markevery is iterable but not a valid form of numpy”花式索引'。有什么想法吗?

我实际的“mark_on”数组会更长,所以我认为在这里使用 linecollection 是不合理的。

frames = 100
def update_pos(num,data,line):
line.set_data(data[...,:num])
return line,

def traj_ani(data):
fig_traj = plt.figure()
l,= plt.plot([],[],'b', markevery = mark_on, marker = '*')
plt.xlim(-90,90)
plt.ylim(-90,90)
pos_ani = animation.FuncAnimation(fig_traj, update_pos, frames = np.shape(data)[1], fargs = (data,l),
interval = 20, blit = True)
pos_ani.save('AgentTrajectory.mp4')

data = pd.read_csv('xy_pos.csv', header = None, skiprows = [0])
data = np.asarray(data)
mark_on = [20, 50, 100, 300, 600]
traj_ani(data)

谢谢!

这是一个完整的、微型的动画示例:

import matplotlib
import matplotlib.pyplot as plt
import matplotlib.animation as animation
import csv
import pandas as pd
import numpy as np

Writer = animation.writers['ffmpeg']
writer = Writer(fps=2000, metadata=dict(artist='Me'), bitrate=1800)

def update_pos(num,data,line):
line.set_data(data[...,:num])
return line,

def traj_ani(data):
fig_traj = plt.figure()
l,= plt.plot([],[],'b')
plt.xlim(0,1)
plt.ylim(0,1)
pos_ani = animation.FuncAnimation(fig_traj, update_pos, frames = 25, fargs = (data,l),
interval = 200, blit = True)
pos_ani.save('AgentTrajectory.mp4')


data = np.random.rand(2,25)
traj_ani(data)

在我的完整代码中,我想指定某些框架,其 x-y 坐标应使用特殊字符或不同的颜色进行标记。

最佳答案

将索引列表设置为 markevery 似乎有问题,其中包含绘制数组中不存在的索引。例如。如果绘制的数组有 3 个元素,但为 markevery 设置的列表包含索引 5,则会发生 ValueError。

解决方案需要在每次迭代中设置 markevery 列表,并确保它只包含有效的索引。

import matplotlib.pyplot as plt
import matplotlib.animation as animation
import numpy as np

mark_on = np.array([2,5,6,13,17,24])

def update_pos(num,data,line):
line.set_data(data[...,:num])
mark = mark_on[mark_on < num]
line.set_markevery(list(mark))
return line,

def traj_ani(data):
fig_traj = plt.figure()
l,= plt.plot([],[],'b', markevery = [], marker = '*', mfc="red", mec="red", ms=15)
plt.xlim(0,1)
plt.ylim(0,1)
pos_ani = animation.FuncAnimation(fig_traj, update_pos, frames = 25, fargs = (data,l),
interval = 200, blit = True)
plt.show()

data = np.random.rand(2,25)
traj_ani(data)

关于python - Markevery 的 FuncAnimation 难度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43100009/

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