python 底图和 pcolormesh 的奇怪行为
Odd behavior with python basemap and pcolormesh
我正在尝试通过制作 numpy.meshgrid 绘制合并数据的纵向条带,使用 Basemap() 将坐标转换为地图 x、y 坐标,然后制作应用于地图的 pcolormesh .代码适用于 Python 2.7:
import numpy as np
from mpl_toolkits.basemap import Basemap, shiftgrid, addcyclic
import matplotlib.pyplot as plt
lon_tics = np.linspace(0, 360.0, 60)
lat_tics = np.linspace(-90.0, 90.0, 30)
map_bins = np.zeros((60,30), dtype = np.int)
bin15 = np.random.randint(0,20,30) #we should see 2 strips
bin45 = np.random.randint(0,20,30) #but we get lots of strange results
map_bins[15] = bin15
map_bins[45] = bin45
m = Basemap(projection='moll',lon_0= -120,resolution='c') #NOTE changing lon_0 has weird results!
lon_bins_2d, lat_bins_2d = np.meshgrid(lon_tics, lat_tics)
xs, ys = m(lon_bins_2d, lat_bins_2d)
plt.pcolormesh(xs, ys, np.transpose(map_bins))
plt.colorbar()
m.drawparallels(np.arange(-90.,120.,30.), labels = [True])
m.drawmeridians(np.arange(0.,360.,60.), labels = [False])
plt.show()
这给出了一些非常奇怪的行为。通过更改数据所在的 bins,其中 lon_0 由 Basemap() 实例化设置,或者 lat/lon bins 的定义方式,我们将获得不同的行为,例如:
- 无纵向条
- 1条纵条
- 2条纵向条带(预期行为)(如图:用lon_0=-120制作)
- 'Smeared' bin 到地图边缘(如图:使用 lon_0=98 制作)
一段时间以来我一直在努力解决这个问题;谁能看出我做错了什么?
感谢阅读。
Correct output
Smear
再四处看看后,我偶然发现了这个 post:Map projection and forced interpolation
这暂时解决了我的问题,所以我会链接以防其他人遇到这个问题。
我正在尝试通过制作 numpy.meshgrid 绘制合并数据的纵向条带,使用 Basemap() 将坐标转换为地图 x、y 坐标,然后制作应用于地图的 pcolormesh .代码适用于 Python 2.7:
import numpy as np
from mpl_toolkits.basemap import Basemap, shiftgrid, addcyclic
import matplotlib.pyplot as plt
lon_tics = np.linspace(0, 360.0, 60)
lat_tics = np.linspace(-90.0, 90.0, 30)
map_bins = np.zeros((60,30), dtype = np.int)
bin15 = np.random.randint(0,20,30) #we should see 2 strips
bin45 = np.random.randint(0,20,30) #but we get lots of strange results
map_bins[15] = bin15
map_bins[45] = bin45
m = Basemap(projection='moll',lon_0= -120,resolution='c') #NOTE changing lon_0 has weird results!
lon_bins_2d, lat_bins_2d = np.meshgrid(lon_tics, lat_tics)
xs, ys = m(lon_bins_2d, lat_bins_2d)
plt.pcolormesh(xs, ys, np.transpose(map_bins))
plt.colorbar()
m.drawparallels(np.arange(-90.,120.,30.), labels = [True])
m.drawmeridians(np.arange(0.,360.,60.), labels = [False])
plt.show()
这给出了一些非常奇怪的行为。通过更改数据所在的 bins,其中 lon_0 由 Basemap() 实例化设置,或者 lat/lon bins 的定义方式,我们将获得不同的行为,例如:
- 无纵向条
- 1条纵条
- 2条纵向条带(预期行为)(如图:用lon_0=-120制作)
- 'Smeared' bin 到地图边缘(如图:使用 lon_0=98 制作)
一段时间以来我一直在努力解决这个问题;谁能看出我做错了什么?
感谢阅读。
Correct output
Smear
再四处看看后,我偶然发现了这个 post:Map projection and forced interpolation
这暂时解决了我的问题,所以我会链接以防其他人遇到这个问题。