【问题标题】:Pylab contour plot using Mollweide projection create artefactsPylab 等高线图使用 Mollweide 投影创建人工制品
【发布时间】:2013-04-15 14:48:43
【问题描述】:

该脚本的目的是使用 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()

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

不使用投影的相同代码输出完美的法线贴图:

您可能已经注意到,轮廓线在两张图片中都表现得非常完美。文物似乎总是在同一个地方。

有没有办法纠正这种人工制品的产生?

【问题讨论】:

标签: matplotlib map-projections


【解决方案1】:

似乎存在一些潜在问题,因为Mollweide projection 在 +/- 90° 的纬度上有奇点。 @pelson 在github 上建议的解决方案是使用底图:

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()

此代码的工作原理如下所示:

【讨论】:

    猜你喜欢
    • 2022-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-28
    相关资源
    最近更新 更多