matplotlib - 使用 Mollweide 投影的 Pylab 等高线图创建人工制品

标签 matplotlib map-projections

该脚本的目的是使用 pylab 对 Mollweide 投影中的一些数据绘制等高线图。 contourf 有一个奇怪的行为。这是代码

import numpy as np
import pylab as plt

ra = np.linspace(-np.pi, np.pi, 40)
dec= np.linspace(-np.pi/2, np.pi/2, 20)
X,Y = np.meshgrid(ra,dec)
Z = np.sin(X) * np.cos(X) * np.sin(Y) * np.cos(Y)

plt.figure()
ax = plt.subplot(111, projection = 'mollweide')
ax.contourf(X,Y,Z,100)
ax.contour(X,Y,Z,10,colors='k')

plt.show()

有些点似乎画错了(见下图)。

Mollweide

在没有投影的情况下使用相同的代码会输出完美的法线贴图: enter image description here

您可能已经注意到,两个图像中的轮廓线都完美地工作。这些文物似乎总是在同一个地方。

有没有办法纠正这种伪影的产生?

最佳答案

由于Mollweide projection,似乎存在一些根本问题。具有 +/- 90° 纬度的奇点。 @pelson 在 github 上建议的解决方案就是使用 basemap :

from mpl_toolkits.basemap import Basemap
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.cm as cm

ra = np.linspace(-np.pi, np.pi, 40)
dec= np.linspace(-np.pi/2, np.pi/2, 20)
X,Y = np.meshgrid(ra,dec)
Z = np.sin(X) * np.cos(X) * np.sin(Y) * np.cos(Y)
RAD = 180/np.pi

m = Basemap(projection='moll',lon_0=0,resolution='c')
m.contour(X*RAD, Y*RAD, Z, 10, colors='k',latlon=True)
m.contourf(X*RAD, Y*RAD, Z, 100, cmap=plt.cm.jet,latlon=True)

plt.show()

该代码的工作原理如下: enter image description here

关于matplotlib - 使用 Mollweide 投影的 Pylab 等高线图创建人工制品,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16018243/

相关文章:

python - 在 matplotlib 中创建一个多级饼图,其中外圆是内圆的子集

python - 如何使用 Matplotlib 或 python 中的其他库设置轴间隔范围

python - 多个 imshow-subplots,每个都有颜色条

python - 使用对数对数图进行多项式拟合

java - 实现 Google 墨卡托(球形墨卡托)

javascript - Openlayers 不重新投影 WMS 查询

python - 如何更改循环/if 语句中散点图的颜色? (Python)

r - 方位角等距投影异常

python - 如何将 Matplotlib 的 stock_img() 与 Cartopy 的 NearsidePerspective 投影相匹配

r - 使用 ggplot2 网格显示不良