python和matplotlib以及更改标记颜色

时间:2012-08-31 17:19:26

标签: python plot matplotlib wxpython matplotlib-basemap

我正在使用matplotlib和Basemap(在wxpython gui中)绘制内容。目前,我的情节代码看起来像这样:

self.map = Basemap(llcrnrlon=lon_L, llcrnrlat=lat_D, urcrnrlon=lon_R,
                               urcrnrlat=lat_U, projection='lcc', lat_0=map_lat1, lon_0=map_lon1, 
                               resolution='i', area_thresh=10000,ax=self.axes, fix_aspect=False) 

 m = Basemap(llcrnrlon=lon_L, llcrnrlat=lat_D, urcrnrlon=lon_R,
                        urcrnrlat=lat_U, projection='lcc', lat_0=map_lat1, lon_0=map_lon1, 
                        resolution='i', area_thresh=10000,ax=self.axes)

x,y=m(some_x_data,some_y_data)
plot_handle, = self.map.plot(x,y,'bo')
plot_handle.set_xdata(x)
plot_handle.set_ydata(y)

self.figure.canvas.draw()

这样就可以了。现在我想做的是取一个点(我的数据中的单个x和单个y)并将其着色为不同的颜色。我仍然想使用plot_handle因为我不断更新地图/情节 - 所以我不想只重置我的数据。有帮助吗?

谢谢!

2 个答案:

答案 0 :(得分:2)

如果您使用scatterdoc),则可以设置和更新每个点的颜色。

import matplotlib.pylab as plt
x,y = m(some_x,some_y)
c = iterator_of_colors
plt_handle, = self.map.scatter(x,y,c=c)
# some code
c[j] = new_color   # update you color list 
plt_handle.set_array(c) # update the colors in the graph
plt.draw()

使用set_array看起来有点奇怪,但这就是matplotlib内部处理散点图的方式(看起来它们使用的是用于显示图像的相同类,只是标记中的颜色而不是网格中的方块。)

答案 1 :(得分:1)

使用不同的标记为特定绘图执行新的plot_handle:

plot_handle1, = self.map.plot([x[i]], [y[i]], 'ro')

每次想要更改该点的位置时,您都必须更新它。不可能只使用一个plot_handle并且使用不同的标记显示点。