首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在中嵌入Cartopy?

如何在中嵌入Cartopy?
EN

Stack Overflow用户
提问于 2013-12-04 20:40:55
回答 1查看 2.1K关注 0票数 3

我想在Python (2.7) Tkinter应用程序(在Windows 7 PC上)中嵌入一个Cartopy模块映射,但我需要帮助弄清楚如何实现。

据我所知,Cartopy模块只允许matplotlib将其“地块”或绘图视为坐标,并将其投影到真实的地理投影中。现在,我已经看到了关于如何将matplotlib嵌入到Tkinter中的问题和指南,但这些问题总是涉及创建matplotlib图(),然后在该图形上使用show()方法和FigureCanvasTkAgg(),而创建cartopy映射的指令通常是简单地使用pyplot的axes()方法,同时提供一个cartopy投影对象,然后在pyplot模块(而不是图对象)中使用show()。我尝试过一些不同的方法,但我无法理解如何协调这两种方法(创建cartopy matplotlib和在Tkinter中嵌入matplotlib )。我有制图、Python和Tkinter方面的经验,但我对matplotlib和cartopy还不熟悉,所以我可能还不太了解这些模块。

如果有人能给出一个具体的代码示例并给出他们的答案,那将是非常有帮助的。看到一个如何在新嵌入的cartopy地图中绘制线条或点的示例也很好,例如,我应该在哪个对象上使用.plot()方法?

从长远来看,希望能够通过Tkinter应用程序与cartopy地图进行交互。顺便说一句,以前有人做过这样的肉搏战吗?

->答案:感谢@Pelson给出了您的答案,并提供了代码示例。对于其他有同样问题的人来说,我理解的关键步骤是: 1)创建matket图图形;2)通过包含一个投影参数(从而使其成为Cartopy轴)向图形添加一个轴;3)使用FigureCanvasTkAgg函数将图形转换为Tkinter小部件,然后使用其show()和get_tk_widget()方法将小部件打包或放置在Tkinter窗口中。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-05 09:10:33

Cartopy和pyplot没有什么特别之处--所有东西都将与matplotlib的OO接口一起工作。这意味着嵌入Cartopy轴与在任何GUI工具箱中嵌入matplotlib轴一样困难。

在本例中,我以tk2.html为例,简单地添加了以下几行:

代码语言:javascript
复制
# Use add_axes or add_subplot.
ax = fig.add_axes([0.01, 0.01, 0.98, 0.98],
                   projection=ccrs.InterruptedGoodeHomolosine())

# ax = fig.add_subplot(1, 1, 1, projection=ccrs.InterruptedGoodeHomolosine())

ax.set_global()
ax.stock_img()
ax.coastlines()

我的完整应用程序看起来如下:

代码语言:javascript
复制
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
from matplotlib.figure import Figure

import cartopy.crs as ccrs

import sys
import Tkinter as Tk

root = Tk.Tk()
root.wm_title("Cartopy in TK")


fig = Figure(figsize=(8,4), dpi=100)

ax = fig.add_axes([0.01, 0.01, 0.98, 0.98], 
                   projection=ccrs.InterruptedGoodeHomolosine())
ax.set_global()
ax.stock_img()
ax.coastlines()

ax.set_title('Cartopy and Tkinter')

# a tk.DrawingArea
canvas = FigureCanvasTkAgg(fig, master=root)
canvas.show()
canvas.get_tk_widget().pack(side=Tk.TOP, fill=Tk.BOTH, expand=1)

canvas._tkcanvas.pack(side=Tk.TOP, fill=Tk.BOTH, expand=1)

button = Tk.Button(master=root, text='Quit', command=sys.exit)
button.pack(side=Tk.BOTTOM)

Tk.mainloop()

若要生成类似于以下内容的Tkinter GUI应用程序:

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20385453

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档