【问题标题】:How to create a reusable basemap如何创建可重复使用的底图
【发布时间】:2015-09-16 22:55:26
【问题描述】:

继续我之前的问题:How to superimpose figures in matplotlib 我想知道如何创建可重用的basemap 对象。 我的问题是basemap 不是pyplot 对象,所以我收到的解决方案在figures / axes 上运行良好,但不适用于basemap 对象。

我试图四处寻找解决方案,但找不到任何解决方案,只是讨论。

【问题讨论】:

  • 您链接到的问题中显示的方法不应该有任何理由不适用于底图轴。
  • 谢谢@joe,但它的工作方式并不完全相同。 basemap 对象不是一对一的 pyplot 对象。
  • 不,它们不是,但它们仍然是对象。您可以将它们传递给一个函数,然后调用它们的方法就好了。他们的绘图方法与Axes 实例非常相似,但也有其他方法。如果您需要底层的Axes 实例,您可以使用map._check_ax() 获得它,其中map 是您的底图对象。你能详细说明你想做什么吗?
  • 当然。我正在尝试在单独的模块中创建图形: 1. 使用basemap 创建基本地图。 2 + 3. 创建 imshow(2) 和 plot(3) 的叠加层。我的主模块允许不同的数字组合。这就是为什么我不想多次创建基本地图的原因。谢谢!
  • 在这种情况下,您可以直接调用map.plot(...)map.imshow(...)(其中map 是您的Basemap 实例)。同样,如果您想要底层轴实例,您可以使用 map._check_ax() 获得它。

标签: python matplotlib figure matplotlib-basemap


【解决方案1】:

感谢@JoeKington 和@EdSmith How to superimpose figures in matplotlib,我能够理解如何实现我想要的:重用底图对象并传递它们。

我是这样弄的:

  1. 创建了一个base_map.py,它有两个功能:plot() 创建一个地图对象并绘制一些属性,另一个set_a_map() 创建一个空地图对象。
  2. 在其他模块中,我向绘图函数添加了一个map=None 属性,并在每个函数中添加了一个:

    if not map:  
        map = base_map.set_a_map()
    

    这样,如果没有地图对象被传递给另一个函数,该函数将创建一个新的地图对象。

  3. 在我的绘图函数中,例如,我没有使用plt.imshow(...),而是使用map.imshow(...)。这样我的数据将被绘制在地图上。

感谢您的耐心和真正有帮助的 cmets!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-13
    相关资源
    最近更新 更多