Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python matplotlib如何清除上一个绘图点?_Python_Animation_Matplotlib - Fatal编程技术网

Python matplotlib如何清除上一个绘图点?

Python 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

我的代码如下。我希望在动画期间,每个帧只绘制一个点,该点应位于线的头部,但事实上,前面的所有点都显示出来。似乎每次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 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函数返回一个行列表,而这里您只需要第一个项目(即使只有一行,返回值也是一个列表)。