Matplotlib与mollweide投射的程度

时间:2017-09-05 20:38:46

标签: python python-3.x matplotlib

我遇到了matplotlib的一些问题,并将数组投影到Mollweide投影中。我正在使用Python 3.6和matplotlib 2.0.2

我有一个np.array的形状(360,180),我无法弄清楚如何让它正确地绘制。

例如

fig = plt.figure()
ax = fig.add_subplot(111, projection='mollweide')
arr = np.zeros((360, 180))
extent=(-np.pi, np.pi, -np.pi/2., np.pi/2.)
im = ax.imshow(arr, cmap=plt.cm.jet,
     extent=extent, aspect=0.5)

生成空白图像。将范围更改为度数:

fig = plt.figure()
ax = fig.add_subplot(111, projection='mollweide')
arr = np.zeros((360, 180))
extent=(-180, 180, -180/2., 180/2.)
im = ax.imshow(arr, cmap=plt.cm.jet,
     extent=extent, aspect=0.5)

生成此图片Matplotlib image。任何帮助将非常感激。

1 个答案:

答案 0 :(得分:1)

在非笛卡儿投影上显示带plt.imshow的图像大多会失败。但是,可以使用pcolormesh。 mollweide投影需要-π,π-π/2., π/2范围内的坐标。因此,您可以使用numpy.meshgrid创建相应的网格,并使用pcolormesh在其上绘制数组。 (请注意,y /纬度是该数组的第一个维度。)

import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure()
ax = fig.add_subplot(111, projection='mollweide')
arr = np.random.rand(180, 360)

lon = np.linspace(-np.pi, np.pi,360)
lat = np.linspace(-np.pi/2., np.pi/2.,180)
Lon,Lat = np.meshgrid(lon,lat)

im = ax.pcolormesh(Lon,Lat,arr, cmap=plt.cm.jet)

plt.show()

enter image description here