15

塗りつぶされた長方形をベースマップにプロットする方法を探しています。この方法を使用して長方形のエッジを簡単に描画できましたdrawgreatcircleが、これらの長方形を実際に塗りつぶす方法(色とアルファを指定)を見つけることができません。

4

3 に答える 3

30

matplotlib.patches.Polygon()を軸に直接追加できます。問題は、長方形でプロット座標(プロット上の直線)を定義するか、マップ座標(プロット上の大円)で定義するかです。いずれの場合も、マップ座標で頂点を指定し、Basemapインスタンス(以下の例)を呼び出してそれらをプロット座標に変換しm()、ポリゴンを自分で作成して、レンダリングする軸に手動で追加します。

プロット座標で定義された長方形の例を次に示します。

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

def draw_screen_poly( lats, lons, m):
    x, y = m( lons, lats )
    xy = zip(x,y)
    poly = Polygon( xy, facecolor='red', alpha=0.4 )
    plt.gca().add_patch(poly)

lats = [ -30, 30, 30, -30 ]
lons = [ -50, -50, 50, 50 ]

m = Basemap(projection='sinu',lon_0=0)
m.drawcoastlines()
m.drawmapboundary()
draw_screen_poly( lats, lons, m )

plt.show()

マップ座標で定義された長方形の場合、同じアプローチを使用しますが、プロット座標に変換する前に、マップ空間でラインを補間します。線分ごとに、次のことを行う必要があります。

lats = np.linspace( lat0, lat1, resolution )
lons = np.linspace( lon0, lon1, resolution )

次に、これらのマップ座標をプロット座標に変換し(上記のように、を使用m())、プロット座標を使用してポリゴンを再度作成します。

于 2012-09-09T05:14:35.607 に答える
6

アンドリューの答えを使用すると、エラーが発生します

TypeError: len() of unsized object.

ただし、zipをリストにキャストすると、これが修正されます。

完全なコード:

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

def draw_screen_poly( lats, lons, m):
    x, y = m( lons, lats )
    xy = zip(x,y)
    poly = Polygon( list(xy), facecolor='red', alpha=0.4 )
    plt.gca().add_patch(poly)

lats = [ -30, 30, 30, -30 ]
lons = [ -50, -50, 50, 50 ]

m = Basemap(projection='sinu',lon_0=0)
m.drawcoastlines()
m.drawmapboundary()
draw_screen_poly( lats, lons, m )

plt.show()
于 2018-05-26T12:20:19.177 に答える
3

上記と同様の答えですが、より基本的なコードです。

from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
from matplotlib.patches import Polygon

map = Basemap(projection='cyl')

map.drawmapboundary(fill_color='aqua')
map.fillcontinents(color='coral',lake_color='aqua')
map.drawcoastlines()

x1,y1 = map(-25,-25)
x2,y2 = map(-25,25)
x3,y3 = map(25,25)
x4,y4 = map(25,-25)
poly = Polygon([(x1,y1),(x2,y2),(x3,y3),(x4,y4)],facecolor='red',edgecolor='green',linewidth=3)
plt.gca().add_patch(poly)

plt.show()
于 2016-11-21T02:57:03.643 に答える