2015-11-26 21 views
11

私はサブプロットインスタンス(matplotlib.axes._subplots.AxesSubplot)をとり、投影を別の投影(例えば、cartopy.crs.CRS投影のいずれか)に変換する単純な関数を作成しようとしています。既存の軸のmatplotlibのサブプロット投影を変更するにはどうすればよいですか?

アイデアはもちろん、この

import cartopy.crs as ccrs 
import matplotlib.pyplot as plt 

def make_ax_map(ax, projection=ccrs.PlateCarree()): 
    # set ax projection to the specified projection 
    ... 
    # other fancy formatting 
    ax2.coastlines() 
    ... 

# Create a grid of plots 
fig, (ax1, ax2) = plt.subplots(ncols=2) 
# the first subplot remains unchanged 
ax1.plot(np.random.rand(10)) 
# the second one gets another projection 
make_ax_map(ax2) 

のようなものが、私はちょうどfig.add_subplot()機能を使用することができますになります。

fig = plt.figure(figsize=(10,5)) 
ax1 = fig.add_subplot(121) 
ax1.plot(np.random.rand(10)) 

ax2 = fig.add_subplot(122,projection=ccrs.PlateCarree()) 
ax2.coastlines() 

が、サブプロットの軸を変更するための適切なmatplotlib方法があれば、私は思っていましたの後に投影が定義されました。 matplotlib APIを読むことは、残念なことに役立たなかった。

答えて

14

既存の軸の投影を変更することはできません。理由は以下のとおりです。しかし、根本的な問題の解決策は、単にsubplot_kw引数をplt.subplots()に、matplotlibのドキュメントhereに記載しています。すべてのあなたのサブプロットはcartopy.crs.PlateCarree投影を持っているしたい場合たとえば、あなたは軸のセットがそれぞれに異なっているあなたが得る軸クラスを決定し、作成時に投影を指定して、実際の質問について

import matplotlib.pyplot as plt 
import cartopy.crs as ccrs 

# Create a grid of plots 
fig, (ax1, ax2) = plt.subplots(ncols=2, subplot_kw={'projection': ccrs.PlateCarree()}) 

を行うことができます投影型。例えば

import matplotlib.pyplot as plt 
import cartopy.crs as ccrs 

ax1 = plt.subplot(311) 
ax2 = plt.subplot(312, projection='polar') 
ax3 = plt.subplot(313, projection=ccrs.PlateCarree()) 

print(type(ax1)) 
print(type(ax2)) 
print(type(ax3)) 

ためのこのコードは、各軸が実際には異なるクラスのインスタンスである方法を以下

<class 'matplotlib.axes._subplots.AxesSubplot'> 
<class 'matplotlib.axes._subplots.PolarAxesSubplot'> 
<class 'cartopy.mpl.geoaxes.GeoAxesSubplot'> 

注意を印刷します。

+3

ありがとうございます!そして確認するために、 'projection'キーワードはすべてのサブプロットのクラスを一度に決定するので、' subplot_kw'にいくつかのプロジェクションを渡す方法はありません。 など。 'plt.subplots(ncols = 2)'によって作成されたサブプロットセットの第2列の 'projection = ccrs.PlateCarree()'を最初の列に 'projection = 'polar''ですか? –

+0

'subplot_kw'のキーワードが各軸に渡されるので、あなたが何を記述することはできないと思います。 'subplots'関数は基本的なユースケースに対応するための便利なラッパーです。もしあなたが' add_subplot'などを使って独自のラッパー関数を書くことができればもっと必要なものがあれば。 – ajdawson

+0

ImageGridでこれを行う方法はありますか? ImageGridで可能な地図の間隔やカラーバーの配置を制御できるのはうれしいことですが、グリッド内のサブプロットの投影を設定する方法はありません。 –

関連する問題