【问题标题】:Plotting Contours of Lat/Lon Based Values绘制基于纬度/经度值的等高线
【发布时间】:2013-07-16 08:08:22
【问题描述】:

我正在尝试使用 mpl_toolkits.basemap 在俄克拉荷马州的地图上绘制天气变量,但在弄清楚如何插入数据以绘制在地图上时遇到问题。

这是我当前代码的总体思路:

lons = [-97.9547, -97.9747, -97.4256]
lats = [35.5322, 35.864, 35.4111]
data = [2,2,2]
map = Basemap(llcrnrlon = -103.068237, llcrnrlat = 33.610045, urcrnrlon = -94.359076, urcrnrlat = 37.040928, resolution = 'i')  


CS = map.contour(X, Y, data)
map.drawstates()
plt.show()

我试图完成的是根据 lons/lats 列表中的相关参考索引在地图上绘制数据值,然后勾勒出数据变量的值。

现在这显然行不通,因为我需要插入数据。有没有办法可以使用 griddata 函数来完成这个任务?鉴于纬度和经度值不是线性间隔的,我对如何建立网格边界感到非常困惑。

有没有我想念的更简单的方法来做到这一点?

任何帮助和/或提示将不胜感激,这阻碍了我继续研究项目的下一个主要部分!

【问题讨论】:

  • 很确定你需要使用meshgrid之类的东西。然后,您需要将数据插入到您 lonslats 创建的网格上。
  • 据我了解,meshgrid 仅适用于不需要插值的数据,例如数据已经设置到它将在方坐标中工作的位置。
  • meshgrid 只是创建了一个网格,你可以在上面插入你想要的任何数据。如果你给它两个数组来创建已经拥有所有你想要的坐标的网格,你不需要做任何插值......
  • 非常感谢,威尔。我昨天查看了网格网格功能,但显然要么误解了它,要么脑子放了个屁。现在我都想通了,再次感谢!

标签: python matplotlib interpolation contour


【解决方案1】:

我没有在这台机器上安装 python,所以无法测试。但是这样的事情应该可以为您提供计数图所需的输入......

import numpy as np

lons = [-97.9547, -97.9747, -97.4256]
lats = [35.5322, 35.864, 35.4111]
data = [2,2,2]

xs, ys = np.meshgrid(lons, lats)

dataMesh = np.empty_like(xs)
for i, j, d in zip(lons, lats, data):
    dataMesh[lons.index(i), lats.index(j)] = d

map = Basemap(llcrnrlon = -103.068237, llcrnrlat = 33.610045, urcrnrlon = -94.359076, urcrnrlat = 37.040928, resolution = 'i')  


CS = map.contour(xs, ys, dataMesh)
map.drawstates()
plt.show()

就像我说的那样,我还没有测试过这个。我不知道如果您尝试绘制单元化值会发生什么。您可能需要使用不同的 numpy 数组初始化。

【讨论】:

  • 这应该行不通!看,您有 3 个数据点并生成一个包含 9 个数据点的矩阵(网格)。那么你从哪里得到这 6 个值呢?
  • @dl.meteo 我不认为那是真实的数据,只是他们所拥有的形式的一个例子。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多