2017-07-11 24 views
0

私はバックグラウンドでグローバルマップを持つ等高線プロットをしようとしています。 私のデータにLONとLATの値があることを覚えているので、私はMatplotLibでCartopyを使うことにしました。Cartopy + Matplotlib(contourf) - マップオーバーライドデータ

問題は、データとマップを完全に区切ってプロットすることができますが、データをマップと統合しようとすると、Cartopyマップがデータプロットよりも優先されます。

これは私のコードです:

ax = plt.axes(projection=cartopy.crs.PlateCarree()) 

v = np.linspace(0, 80, 25, endpoint=True) 
cp = plt.contourf(matrixLon, matrixLat, matrixTec, v, transform=cartopy.crs.PlateCarree()) 
plt.colorbar(cp) 

ax.add_feature(cartopy.feature.LAND) 
ax.add_feature(cartopy.feature.OCEAN) 
ax.add_feature(cartopy.feature.COASTLINE) 
ax.add_feature(cartopy.feature.BORDERS, linestyle=':') 
ax.set_extent([-85, -30, -60, 15]) 

plt.title('TEC Map') 
plt.show() 

プロット:

Plotting only Data

Plotting only the map

私は論理的にはデータがマップをオーバーライドする(そして多分あると思うので、それは奇妙です私は透明な色のスケールを試す必要がありますが、それ以外の方法はありません)。

誰かがこの問題を私に助けてくれますか?

答えて

1

あなたが試して習得できる作業コードは次のとおりです。

import matplotlib.pyplot as plt 
#import cartopy.crs as ccrs 
import numpy as np 
import cartopy 

# prep some data for contourf plot 
# extents: upper-right of the map 
x = np.linspace(-65, -30, 30) 
y = np.linspace(-30, 15, 30) 
matrixLon, matrixLat = np.meshgrid(x, y) 
matrixTec = 10*np.sin(matrixLon**2 + matrixLat**2)/(matrixLon**2 + matrixLat**2) 

ax = plt.axes(projection=cartopy.crs.PlateCarree()) 

# prep increasing values of v covering values of Z (matrixTec) 
v = np.arange(-0.15, 0.15, 0.025) 

# plot with appropriate parameters 
# zorder: put the filled-contour on top 
# alpha: set transparency to allow some visibility of graphics below 
cp = plt.contourf(matrixLon, matrixLat, matrixTec, v, \ 
        transform=cartopy.crs.PlateCarree(), \ 
        zorder=2, \ 
        alpha=0.65, \ 
        cmap=plt.cm.copper) 
plt.colorbar(cp) 

ax.add_feature(cartopy.feature.LAND) 
ax.add_feature(cartopy.feature.OCEAN) 
ax.add_feature(cartopy.feature.COASTLINE) 
ax.add_feature(cartopy.feature.BORDERS, linestyle=':') 
ax.set_extent([-85, -30, -60, 15]) 

plt.title('TEC Map') 
plt.show() 

本質は、マップ上の一部の機能を表示または非表示に設定することができますplt.contourfでzorderalphaの使用()です。

enter image description here

+0

お返事ありがとうございます。私の問題を解決するために説明され、助けられました! :) – Hollweg

+0

@Hollweg感謝の言葉を言う正しい方法は+投票を与えて、私の答えを受け入れるためにクリックします。 :) – swatchai

関連する問題