我有一个带有线条的动画,现在我想标记这些点。我尝试了plt.annotate()
,plt.text()
但尝试不动。这是我的示例代码:
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
def update_line(num, data, line):
newData = np.array([[1+num,2+num/2,3,4-num/4,5+num],[7,4,9+num/3,2,3]])
line.set_data(newData)
plt.annotate('A0', xy=(newData[0][0],newData[1][0]))
return line,
fig1 = plt.figure()
data = np.array([[1,2,3,4,5],[7,4,9,2,3]])
l, = plt.plot([], [], 'r-')
plt.xlim(0, 20)
plt.ylim(0, 20)
plt.annotate('A0', xy=(data[0][0], data[1][0]))
# plt.text( data[0][0], data[1][0], 'A0')
line_ani = animation.FuncAnimation(fig1, update_line, 25, fargs=(data, l),
interval=200, blit=True)
plt.show()
你能帮我吗?
我的下一步是:在这些点中有原始向量。这些向量在每个动画步骤中都会更改其长度和方向。如何为这些动画?
如果没有动画,则可以:
soa =np.array( [ [data[0][0],data[1][0],F_A0[i][0][0],F_A0[i][1][0]],
[data[0][1],data[1][1],F_B0[i][0][0],F_B0[i][1][0]],
[data[0][2],data[1][2],F_D[i][0][0],F_D[i][1][0]] ])
X,Y,U,V = zip(*soa)
ax = plt.gca()
ax.quiver(X,Y,U,V,angles='xy',scale_units='xy',scale=1)
首先,非常感谢您的快速实用的回答!
我已经解决了我的Vector动画问题:
annotation = ax.annotate("C0", xy=(data[0][2], data[1][2]), xycoords='data',
xytext=(data[0][2]+1, data[1][2]+1), textcoords='data',
arrowprops=dict(arrowstyle="->"))
然后在“更新功能”中输入:
annotation.xytext = (newData[0][2], newData[1][2])
annotation.xy = (data[0][2]+num, data[1][2]+num)
更改矢量的开始和结束位置(箭头)。
但是,有100个向量或更多向量是什么?写下以下内容是不可行的:
annotation1 = ...
annotation2 = ...
.
:
annotation100 = ...
我尝试了一个列表:
...
annotation = [annotation1, annotation2, ... , annotation100]
...
def update(num):
...
return line, annotation
并得到以下错误:AttributeError:’list’对象没有属性’axes’
我能做什么?你有什么主意吗
您可以返回所有从更新功能更改的对象。因此,由于注释已更改,因此您还应该返回它的位置:
line.set_data(newData)
annotation = plt.annotate('A0', xy=(newData[0][0],newData[1][0]))
return line, annotation
您可以matplotlib
在本教程中阅读有关动画的更多信息
您还应该指定init
函数,以便FuncAnimation
在第一次更新时重画时知道要从图中删除哪些元素。因此,完整的示例将是:
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
# Create initial data
data = np.array([[1,2,3,4,5], [7,4,9,2,3]])
# Create figure and axes
fig = plt.figure()
ax = plt.axes(xlim=(0, 20), ylim=(0, 20))
# Create initial objects
line, = ax.plot([], [], 'r-')
annotation = ax.annotate('A0', xy=(data[0][0], data[1][0]))
annotation.set_animated(True)
# Create the init function that returns the objects
# that will change during the animation process
def init():
return line, annotation
# Create the update function that returns all the
# objects that have changed
def update(num):
newData = np.array([[1 + num, 2 + num / 2, 3, 4 - num / 4, 5 + num],
[7, 4, 9 + num / 3, 2, 3]])
line.set_data(newData)
# This is not working i 1.2.1
# annotation.set_position((newData[0][0], newData[1][0]))
annotation.xytext = (newData[0][0], newData[1][0])
return line, annotation
anim = animation.FuncAnimation(fig, update, frames=25, init_func=init,
interval=200, blit=True)
plt.show()
问题内容: 我想用matplotlib制作3D动画,但是我不知道该怎么做。这是我的无效代码。 问题答案: 我使用了以下示例http://matplotlib.org/1.4.1/examples/animation/simple_3danim.html 并修改了您的代码:
问题内容: 我有这个代码。我想添加一个子图来绘制余弦函数。(我不想创建一个类)。第二个图也应动态更新 问题答案: 基本上,您可以使用与示例中的结构非常相似的结构。您只需要创建一个附加轴(子图)和第二条线对象:
我想从下图一点一点地设置动画,但我的问题是图像的弯曲部分(图像的底部)。 在开始时,所有点都应该隐藏,然后每个点都应该在视图中设置动画。 我有以下代码:
我想这样做:https://storage.googleapis.com/spec-host/mio-staging/mio-design/1563837804615/assets/1XlKhaQFU9aS84ACmF-EDjVKDgI4pPldv/02-overflowmenu.mp4 我想挤压一个“ViewGroup”,正如你在视频中看到的。与此同时,我想淡出ViewGroup中的内容在其原始
那我试试这个 但是我有 如何设置xlabel和ylabel,然后将新图像另存为文件?
问题内容: 我正在绘制星团中的位置,我的数据在具有x,y,z位置以及时间索引的数据框中。 我能够生成3d散点图,并试图生成旋转图-我虽然取得了一些成功,但是却在动画API方面苦苦挣扎。 如果我的“ update_graph”函数仅返回一个新的ax.scatter(),则除非我重建整个图,否则旧图将保持绘制状态。看来效率低下。同样,我必须将间隔设置得很高,否则我的动画每隔一帧就会“跳过”,所以这表示