2

正投影ですべての球をカバーするグリッドを描画したいと思います。問題は、投影の外側のセルが正しく描画されないことです。これは、ここでdrawgreatcircles指摘したように発生しました。

hereで説明されているようにポリゴンを使用しようとしましたが、同じ問題があります。

最後に、 Wikipediaに基づいてカスタム チェックをコーディングしました。アイデアは、各セグメントの各ポイントについてです。チェックしcos c(ウィキペディアを参照)、コサインが負の場合はプロットしません。

私の質問は次のとおりです。ベースマップ独自の関数でこの種のチェックを行うことはできますか? この戦略は、他の予測では機能しません。

また、この種のチェックが Basemap に含まれていないのはなぜですか?

4

2 に答える 2

3

あなたの例のおかげで、私はデータを取り、カートピーでプロットしました。プロットを作成するには、次の変更が必要でした。

import cartopy.crs as ccrs
ax =plt.axes(projection=ccrs.Orthographic())
plt.pcolormesh(lons, lats,val, edgecolors='k', 
               linewidths=1, transform=ccrs.PlateCarree())

ax.coastlines()
ax.gridlines()

plt.show()

cartopy を使用した出力

これは pcolormesh を使用しているため、かなり高速です(ただし、最初は私のマシンでの例はそれほど遅くはありませんでした)。

于 2013-05-08T20:26:50.163 に答える
1

pcolor を使用したソリューションは次のとおりです。

import pylab as plt
from mpl_toolkits.basemap import Basemap
import numpy as np

nb_lat2 = 20
nb_lat = 2*nb_lat2
nb_lon = 3*(2*(nb_lat+1) - 1)
lats = np.zeros((2*nb_lat, nb_lon))
lons = np.zeros((2*nb_lat, nb_lon))
val = np.zeros((2*nb_lat, nb_lon))
dlat = 90./nb_lat2
for i in range(nb_lat):

  nb_lon = 2*(i+1)-1
  if ((i+1) > nb_lat2):
    nb_lon = 2*(nb_lat - i)-1

  dlon = 120./nb_lon
  lats[2*i][:] = 90 - i*dlat
  lats[2*i+1][:] = 90 - (i+1)*dlat
  for j in range(nb_lon):
    lons[2*i][j] = j*dlon
    lons[2*i+1][j] = j*dlon

    for k in range(1,3):
      lons[2*i][j + k*nb_lon] = j*dlon + 120.*k
      lons[2*i+1][j + k*nb_lon] = j*dlon + 120.*k

    lons[2*i][3*nb_lon:] = nb_lon*dlon + 240.
    lons[2*i+1][3*nb_lon:] = nb_lon*dlon + 240.

lons = lons - 180
val = lats + lons
# Crash
##m = Basemap(projection='robin',lon_0=0,resolution=None)

#m = Basemap(projection='mill',lon_0=0)
m = Basemap(projection='ortho', lat_0=0,lon_0=0)
x, y = m(lons, lats)
m.pcolor(x,y,val, edgecolors='k', linewidths=1)

m.drawcoastlines()
m.drawparallels(np.arange(-90.,91.,30.))
m.drawmeridians(np.arange(-180.,181.,60.))

plt.show()

これはまさに私が望むことです: 長方形を描き、それらを 1 つの色で塗りつぶします。しかし、それは非常に遅いです(遅すぎます)。多くのセルが未使用です: 緯度線の最後で、未使用のセルの幅を 0 に設定します。

もう 1 つの問題は、一部のプロジェクションがクラッシュすることです (Robin など)。

于 2013-02-19T14:57:04.363 に答える