wxPython中matplotlib上的弹出注释

2024-09-27 00:22:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个双面板wxpythongui。在我的右面板中,有一个使用Basemap的地图显示。在这张(美国的)底图上,我画了一张不同城市的散点图。我希望能够点击这些点,并在我的图形用户界面中有一个弹出窗口,提供与我选择的点相关的一些信息(例如,城市、纬度/经度等——我会将所有这些信息存储在列表或其他方式中)。在

我遇到过AnnoteFinder,但这在我的GUI中似乎不起作用(如果我使用itelf的Basemap而不是在我的2面板GUI中使用的话,它就可以工作了)。另外,这只是在圆点上加上一些文本--我宁愿显示一个小窗口。在

到目前为止我的代码示例:

#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()

有什么想法吗?在


Tags: self信息面板mapguifigurecanvasbasemap
1条回答
网友
1楼 · 发布于 2024-09-27 00:22:07

签出this answer。基本上,您设置了一个pick事件,在图上创建一个注释。此批注可以作为工具提示样式的文本框弹出。在

请注意,这并不会生成真正的GUI“窗口”(即对话框或其他带有关闭按钮、标题栏等的控件),而只是绘图本身的注释。然而,从代码中你可以看到它是如何决定你点击的艺术家(例如,点)。一旦你有了这些信息,你就可以运行任何你想要的代码,比如创建一个wxPython对话框而不是一个注释。在

编辑回答关于最后几行的问题:根据您的代码,您似乎希望:

pts = self.map.scatter(x, y, 90)
self.figure.canvas.mpl_connect('pick_event', DataCursor(plt.gca()))
pts.set_picker(5)

另一个编辑是关于注释中有不同文本的问题:您可能需要在event对象上稍作调整,以提取所需的信息。如http://matplotlib.sourceforge.net/users/event_handling.html#simple-picking-example所述,不同的艺术家类型(即不同类型的情节)将提供不同的事件信息。在

我有一些旧代码,几乎完全符合您所描述的(当单击地图上的某个点时显示城市名称)。我不得不承认,我不记得它是如何工作的,但我的代码在DataCursor中有这样的内容:

^{pr2}$

clim['Name']是城市名称的列表,我可以使用event.ind索引到该列表中,以获得与拾取点相对应的城市名称。根据数据格式的不同,代码可能需要稍有不同,但这应该能让您有所了解。在

相关问题 更多 >

    热门问题