Python 如何使用Matplot.lib在动画图形中使用图像而不是标记
我一直在尝试使用动画中移动的图像,而不是“ro”(红点)或类似的标记,到目前为止,我有一个图,图中有一个小红点在虚线上移动。我希望图像是通过虚线移动的图像,而不是红点 这是我的密码:Python 如何使用Matplot.lib在动画图形中使用图像而不是标记,python,image,matplotlib,animation,Python,Image,Matplotlib,Animation,我一直在尝试使用动画中移动的图像,而不是“ro”(红点)或类似的标记,到目前为止,我有一个图,图中有一个小红点在虚线上移动。我希望图像是通过虚线移动的图像,而不是红点 这是我的密码: import numpy as np import matplotlib.pyplot as plt from matplotlib.animation import FuncAnimation fig, ax = plt.subplots() xdata, ydata = [], [] img = plt.i
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
fig, ax = plt.subplots()
xdata, ydata = [], []
img = plt.imread("/Users/salomondabbah/Desktop/mar.jpg")
ax.imshow(img, extent=[0, 2 * np.pi, -1, 1])
xtrack = np.linspace(0, 2 * np.pi, 240)
ytrack = np.sin(xtrack)
ln, = plt.plot([], [], ***'ro'***, zorder=15)
ax.plot(xtrack, np.sin(xtrack), 'k', linewidth=25.0, zorder=5)
ax.plot(xtrack, ytrack, '--y',linewidth=2.0, zorder=10)
def init():
ax.set_xlim(0, 2*np.pi)
ax.set_ylim(-1, 1)
return ln,
def update(frame):
ln.set_data(frame, np.sin(frame))
return ln,
ani = FuncAnimation(fig, update, frames=np.linspace(0, 2*np.pi, 128),
init_func=init, blit=False)
plt.show()
提前感谢您为我的问题提供的任何解决方案 与您正在执行的操作类似,但使用
set_extent
和imshow
而不是set_data
和一行:
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
fig, ax = plt.subplots(figsize=(5,5))
xdata, ydata = [], []
xtrack = np.linspace(0, 2 * np.pi, 240)
ytrack = np.sin(xtrack)
img = plt.imread("car.png")
im = ax.imshow(img, zorder=10, aspect='auto')
ax.plot(xtrack, np.sin(xtrack), 'k', linewidth=25.0, zorder=5)
ax.plot(xtrack, ytrack, '--y',linewidth=2.0, zorder=10)
def init():
ax.set_xlim(0, 2*np.pi)
ax.set_ylim(-1, 1)
return ln,
def update(frame):
l = frame - 0.5
r = frame + 0.5
b = np.sin(frame) - 0.2
t = np.sin(frame) + 0.2
im.set_extent([l,r,b,t])
return ln,
ani = FuncAnimation(fig, update, frames=np.linspace(0, 2*np.pi, 128),
init_func=init, blit=False)
ani.save('ani.gif', writer='pillow')
唯一finnicky的事情是获得所需的图形大小和纵横比以及汽车的大小和纵横比。如我所添加的,当创建整个图形时,可以使用
figsize
对其进行编辑。但是如果不将imshow
的aspect
参数设置为auto
,它将覆盖图形大小和形状,以使图像具有正确的尺寸(看起来)。因此,您可能必须在update
中使用0.5
和0.2
值,以保持图像的尺寸大致正确。与您正在执行的操作类似,但使用set_extent
和imshow
代替set_data
使用一行:
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
fig, ax = plt.subplots(figsize=(5,5))
xdata, ydata = [], []
xtrack = np.linspace(0, 2 * np.pi, 240)
ytrack = np.sin(xtrack)
img = plt.imread("car.png")
im = ax.imshow(img, zorder=10, aspect='auto')
ax.plot(xtrack, np.sin(xtrack), 'k', linewidth=25.0, zorder=5)
ax.plot(xtrack, ytrack, '--y',linewidth=2.0, zorder=10)
def init():
ax.set_xlim(0, 2*np.pi)
ax.set_ylim(-1, 1)
return ln,
def update(frame):
l = frame - 0.5
r = frame + 0.5
b = np.sin(frame) - 0.2
t = np.sin(frame) + 0.2
im.set_extent([l,r,b,t])
return ln,
ani = FuncAnimation(fig, update, frames=np.linspace(0, 2*np.pi, 128),
init_func=init, blit=False)
ani.save('ani.gif', writer='pillow')
唯一finnicky的事情是获得所需的图形大小和纵横比以及汽车的大小和纵横比。如我所添加的,当创建整个图形时,可以使用figsize
对其进行编辑。但是如果不将imshow
的aspect
参数设置为auto
,它将覆盖图形大小和形状,以使图像具有正确的尺寸(看起来)。因此,您可能必须在update
中使用0.5
和0.2
值,以保持图像的尺寸大致正确