Python matplotlib如何清除上一个绘图点?
我的代码如下。我希望在动画期间,每个帧只绘制一个点,该点应位于线的头部,但事实上,前面的所有点都显示出来。似乎每次plt仅向图纸添加点,如何更改该点以明确上一点?df如下所示,以供参考 0.0.0 0.26 186780.0 0.27 197556.0 0.53519439.0 0.54 533579.0 0.8 946285.0 0.81 960288.0 1.07 1306550.0 1.08 1320020.0 1.34 1642600.0Python matplotlib如何清除上一个绘图点?,python,animation,matplotlib,Python,Animation,Matplotlib,我的代码如下。我希望在动画期间,每个帧只绘制一个点,该点应位于线的头部,但事实上,前面的所有点都显示出来。似乎每次plt仅向图纸添加点,如何更改该点以明确上一点?df如下所示,以供参考 0.0.0 0.26 186780.0 0.27 197556.0 0.53519439.0 0.54 533579.0 0.8 946285.0 0.81 960288.0 1.07 1306550.0 1.08 1320020.0 1.34 1642600.0 from matplotlib import p
from matplotlib import pyplot as plt
from matplotlib import animation,rc
import pandas as pd
fig = plt.figure()
df=pd.read_csv('radialforce.csv', sep=';',skipinitialspace=True,na_values="
NaN")
df.dropna(axis="columns", how="any", inplace=True)
df.columns.values[1] = 'Y'
def animate(n):
plt.plot(df['X'][:n], df['Y'][:n],color='g',lw='0.5')
plt.scatter(df['X'][n], df['Y'][n],10,facecolor='r',edgecolor='r')
return fig
anim = animation.FuncAnimation(fig, animate,frames=len(df['X']),
interval=100)
plt.show()
您不希望每次迭代都重新绘制所有内容。相反,您希望更新线并分散
from matplotlib import pyplot as plt
from matplotlib import animation,rc
import pandas as pd
fig = plt.figure()
df=pd.read_csv(...)
df.dropna(axis="columns", how="any", inplace=True)
df.columns.values[1] = 'Y'
line, = plt.plot(df['X'][:1], df['Y'][:1],color='g',lw='0.5')
scatter = plt.scatter(df['X'][0], df['Y'][0],10,facecolor='r',edgecolor='r')
def animate(n):
x,y=df['X'][:n+1], df['Y'][:n+1]
line.set_data(x,y)
scatter.set_offsets([df['X'][n], df['Y'][n]])
plt.gca().relim()
plt.gca().autoscale_view()
anim = animation.FuncAnimation(fig, animate,frames=len(df['X']), interval=100)
plt.show()
您不希望每次迭代都重新绘制所有内容。相反,您希望更新线并分散
from matplotlib import pyplot as plt
from matplotlib import animation,rc
import pandas as pd
fig = plt.figure()
df=pd.read_csv(...)
df.dropna(axis="columns", how="any", inplace=True)
df.columns.values[1] = 'Y'
line, = plt.plot(df['X'][:1], df['Y'][:1],color='g',lw='0.5')
scatter = plt.scatter(df['X'][0], df['Y'][0],10,facecolor='r',edgecolor='r')
def animate(n):
x,y=df['X'][:n+1], df['Y'][:n+1]
line.set_data(x,y)
scatter.set_offsets([df['X'][n], df['Y'][n]])
plt.gca().relim()
plt.gca().autoscale_view()
anim = animation.FuncAnimation(fig, animate,frames=len(df['X']), interval=100)
plt.show()
图形的每一帧都是这样的:首先,点显示,然后线连接到点。我所期望的是,这幅画就像一条一直在生长的蛇,每一帧都是这样的:首先,点显示出来,然后线连接到点。我所期望的是,这幅画就像一条一直在生长的蛇。非常感谢。这里有几个问题:为什么在一行后面加“,”呢?因为线条的形状也需要显示,所以我尝试在每次迭代中重新绘制线条,但只更新点,它就工作了。但我仍然不明白为什么重画点(散布点)没有清除之前的点,这是默认行为吗?为了纠正我的评论,line.set_数据似乎没有重新缩放限制,当我试图设置限制时,绘图似乎很奇怪。但是当我在animate函数中使用line plot时,它是有效的。
,
是因为plot函数返回一个行列表,这里您只需要第一项(即使只有一行,返回值也是一个列表)。非常感谢。这里有几个问题:为什么在一行后面加“,”呢?因为线条的形状也需要显示,所以我尝试在每次迭代中重新绘制线条,但只更新点,它就工作了。但我仍然不明白为什么重画点(散布点)没有清除之前的点,这是默认行为吗?为了纠正我的评论,line.set_数据似乎没有重新缩放限制,当我试图设置限制时,绘图似乎很奇怪。但是当我在animate函数中使用line plot时,它是有效的。,
是因为plot函数返回一个行列表,而这里您只需要第一个项目(即使只有一行,返回值也是一个列表)。