问题
I am using rospy to get data of my robot's position and plot this in real time.
This is what I have:
self.plot_pose()
def plot_pose(self):
plt.plot(self.pose[0], self.pose[1], 'o', color='green')
plt.plot([self.pose[0], self.pose[0] - 0.5*np.cos(self.pose[2])],
[self.pose[1], self.pose[1] + 0.5*np.sin(self.pose[2])],
'k-', color='red', lw=2)
plt.show(block=False)
plt.pause(0.0001)
Unfortunately this doesn't erase the plot but overlays everything. So I tried using
plt.clf()
plt.cla()
the first one gives me deprecation error and the second one gives me a blank plot for some reason. I am using python2.7 and rospy library.
Any suggestions on how to update the plot would be greatly appreciated.
回答1:
This is the same as usual with animations. Try to avoid creating new plots every interation and instead update the old one.
self.point, = plt.plot([],[], 'o', color='green')
self.line, = plt.plot([],[], ls="-", color='red', lw=2)
plt.show(block=False)
self.plot_pose()
def plot_pose(self):
self.point.set_data(self.pose[0], self.pose[1])
self.line.set_data([self.pose[0], self.pose[0] - 0.5*np.cos(self.pose[2])],
[self.pose[1], self.pose[1] + 0.5*np.sin(self.pose[2])])
plt.pause(0.0001)
You may need to adjust the limits of the plot (plt.xlim()
, plt.ylim()
) if the points are outside of it.
来源:https://stackoverflow.com/questions/47040324/how-to-update-matplotlib-pyplot-on-every-iteration