2

スクリプトの目的は、pylab を使用してモルワイデ図法でいくつかのデータの等高線図を作成することです。の奇妙な動作があり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()

一部の点が間違って描かれているようです (下の図を参照)。

モルワイデ

射影なしで同じコードを使用すると、完全な法線マップが出力されます。 ここに画像の説明を入力

両方の画像で等高線が完全に機能していることに気付いたかもしれません。アーティファクトは常に同じ場所にあるようです。

このアーティファクトの生成を修正する方法はありますか?

4

1 に答える 1

2

モルワイデ図法には緯度 +/- 90° の特異点があるため、根本的な問題があるようです。githubで@pelson が提案する解決策は、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()

このコードは、以下で証明されているように機能します。 ここに画像の説明を入力

于 2013-04-16T13:08:11.313 に答える