3

Я рисую график разброса на базовой карте. Однако данные с этой диаграммой рассеяния изменяются в зависимости от пользовательского ввода. Я хотел бы очистить данные (только данные - не весь рисунок базовой карты) и переделать новые точки разброса.Перерисовывая участок на Basemap в Python

Этот вопрос похож, но не ответил (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() 

Тогда я сделать некоторый тип обновления на моем (х, у) ...

#Clear the Basemap and scatter plot figures 
self.figure.clf() 

Тогда я повторяю все выше кода. (Мне также нужно переделать мои ящики для моей панели - я не включил их).

Спасибо!

+0

Не могли бы вы высказать какой-то код? Я хотел бы посмотреть, как будет строиться график разброса. – stanri

ответ

4

matplotlib.pyplot.plot документация упоминает о том, что команда участка() возвращает Line2D группу, которая имеет XDATA и ydata свойств, так что вы могли бы сделать следующее:

# 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, к сожалению.

+0

Это сработало отлично! Благодаря! – mcfly

+0

Можете ли вы объяснить, что цель запятой в левой части знака равенства в 'plot_handle, = self.map.plot (x, y, 'ro')' is? Я знаю, что это необходимо, но я не понимаю, почему. –

+1

@KShores Он распаковывает первый элемент из кортежа. См. Http://stackoverflow.com/questions/1708292/meaning-of-using-commas-and-underscores-with-python-assignment-operator – stanri

0

Большинство функций построения графика Collections объект. Если это так, вы можете использовать метод remove(). В вашем случае я бы сделал следующее:

# Use the Basemap method for plotting 
points = m.scatter(x,y,marker='o') 
some_function_before_remove() 

points.remove() 

 Смежные вопросы

  • Нет связанных вопросов^_^