我正在底图上绘制散点图。但是,具有此散点图的数据会根据用户输入而更改。我想清除数据(只有数据 - 而不是整个底图图)并重新绘制新的散点图。
这个问题很相似,但未得到解答(http://stackoverflow.com/questions/8429693/python-copy-basemap-or-remove-data-from-figure)
目前我正在使用clf()关闭数字;但是,这需要我重新绘制整个底图和散点图。最重要的是,我正在对wx面板中的所有重绘进行。底图重绘需要太长时间,我希望有一种简单的方法来简单地重新绘制散点图。
#Setting up Map Figure
self.figure = Figure(None,dpi=75)
self.canvas = FigureCanvas(self.PlotPanel, -1, self.figure)
self.axes = self.figure.add_axes([0,0,1,1],frameon=False)
self.SetColor( (255,255,255) )
#Basemap Setup
self.map = Basemap(llcrnrlon=-119, llcrnrlat=22, urcrnrlon=-64,
urcrnrlat=49, projection='lcc', lat_1=33, lat_2=45,
lon_0=-95, resolution='h', area_thresh=10000,ax=self.axes)
self.map.drawcoastlines()
self.map.drawcountries()
self.map.drawstates()
self.figure.canvas.draw()
#Set up Scatter Plot
m = Basemap(llcrnrlon=-119, llcrnrlat=22, urcrnrlon=-64,
urcrnrlat=49, projection='lcc', lat_1=33, lat_2=45,
lon_0=-95, resolution='h', area_thresh=10000,ax=self.axes)
x,y=m(Long,Lat)
#Scatter Plot (they plot the same thing)
self.map.plot(x,y,'ro')
self.map.scatter(x,y,90)
self.figure.canvas.draw()
然后我在我的(x,y)...
上做了某种类型的更新#Clear the Basemap and scatter plot figures
self.figure.clf()
然后我重复上面的所有代码。 (我还必须为我的面板重做我的盒子大小调整器 - 我没有包括这些)。
谢谢!
答案 0 :(得分:4)
matplotlib.pyplot.plot文档提到plot()命令返回一个具有xdata和ydata属性的Line2D艺术家,因此您可以执行以下操作:
# When plotting initially, save the handle
plot_handle, = self.map.plot(x,y,'ro')
...
# When changing the data, change the xdata and ydata and redraw
plot_handle.set_ydata(new_y)
plot_handle.set_xdata(new_x)
self.figure.canvas.draw()
遗憾的是,我还没有设法将上述内容用于收藏,或3d projections。
答案 1 :(得分:0)
大多数绘图函数返回Collections
个对象。如果是这样,那么您可以使用remove()
方法。在你的情况下,我会做以下事情:
# Use the Basemap method for plotting
points = m.scatter(x,y,marker='o')
some_function_before_remove()
points.remove()