RuntaScience diary

気象系データを扱う学生 旅が好きです

Welcome to my blog

About

Cartopy-月ごとにマップを分割しよう

 こんにちは!
今回は月ごとのデータを分割して表示してみたいと思います

 

基礎 

まずは必要なモジュールをインポートします。

import numpy as np #数値計算
import matplotlib.pyplot as plt #描写

グラフを書いていきます

 

#グラフ領域の用意 縦に3マス横に4マス
fig, axes = plt.subplots(nrows=4, ncols=3,figsize=(20,15)) plt.rcParams["font.size"] = 18 #フォントサイズ一括設定
#全体のタイトル設定(yは縦方向の文字の位置設定) plt.suptitle("Title", y = 0.95)
#ここから12個グラフを書いていきます for i, ax in enumerate(axes.flat): #i番目のaxを用意 ax = plt.subplot(3, 4, i+1)
#データと描写 xdata = np.arange(0,100,1) *1 ydata = np.random.rand(100) *2 ax.plot(xdata, ydata)
ax.set_title(i+1) plt.show() # 保存 fig.savefig("XXX.png" ,format="png", dpi=330)

f:id:RuntaScience:20200616102811p:plain 

Keys

1) 0~99までの数字の配列(array)を1個おきに作成

2) 0~1までのランダムな数字を100個作成(array)

 

ランダムウォーク

 データをランダムウォークにして描写してみましょう

fig, axes = plt.subplots(nrows=4, ncols=3,figsize=(20,15)) 
plt.rcParams["font.size"] = 18

plt.suptitle("Title", y = 0.95)

for i, ax in enumerate(axes.flat):
    
    ax = plt.subplot(3, 4, i+1)
    
    xdata = np.arange(0,100,1)
#ランダムウォーク *1 l = 100 step = np.random.choice([-1, 1], l) ydata = np.cumsum(step) ax.plot(xdata, ydata) ax.set_title(i+1) plt.show() fig.savefig("XXX.png" ,format="png", dpi=330)

 

f:id:RuntaScience:20200616102831p:plain

Key

1) ランダムウォーク

qiita.com

 

Cartopy

まずは必要なモジュールをインポートします。

imporimport matplotlib.pyplot as plt #描写
import cartopy.crs as ccrs #cartopy
import matplotlib.ticker as mticker #緯度経度
#緯度経度線を度数表示にするため
from cartopy.mpl.gridliner import LONGITUDE_FORMATTER, LATITUDE_FORMATTER
import cartopy.feature as cfeature
import numpy as npt numpy as np #数値計算 import matplotlib.pyplot as plt #描写

グラフを書いていきます

 

fig, axes = plt.subplots(nrows=4, ncols=3,figsize=(20,15)) 
plt.rcParams["font.size"] = 18

plt.suptitle("Title", y=0.95)
month_names = ["Jan.", "Feb.", "Mar.", "Apr.", "May", "June", "July", "Aug.", "Sept.", "Oct.", "Nov.", "Dec."]
for i, ax in enumerate(axes.flat):

    ax = plt.subplot(3, 4, i+1, projection=ccrs.PlateCarree())
    ax.set_title(month_names[i])
    ax.coastlines(resolution="50m") 
    ax.add_feature(cfeature.BORDERS, linestyle=":")
    ax.stock_img() #地図の色を塗る
    
    gl = ax.gridlines(crs=ccrs.PlateCarree(), draw_labels=True,
                  linewidth=2, color='gray', alpha=0.5, linestyle=':')
    gl.xlabels_top = False
    gl.ylabels_right = False
    dlon, dlat = 15, 10
    xticks = np.arange(-180, 180.1, dlon)
    yticks = np.arange(-90, 90.1, dlat)
    gl.xlocator = mticker.FixedLocator(xticks)
    gl.ylocator = mticker.FixedLocator(yticks)
    gl.xformatter = LONGITUDE_FORMATTER
    gl.yformatter = LATITUDE_FORMATTER
    gl.xlabel_style = {'size': 18}
    gl.ylabel_style = {'size': 18}
    
    #表示範囲 *1
    ax.set_extent([120-0.5,160+0.5,20-0.5,60+0.5], ccrs.PlateCarree()) 
#グラフ間の幅 *2 plt.subplots_adjust(wspace=0.2, hspace=0.2) fig.savefig("XXX.png" ,format="png", dpi=330)

 

f:id:RuntaScience:20200616102845p:plain



Keys

1) 表示範囲の緯度経度よりほんの少しだけ大きくしないと、度数目盛が表示されないことがあります。したがって、今回は±0.5度大きく範囲設定をしました

 2)グラフ間の幅は横幅:wspace、縦幅:hspaceで設定できます

☆ Cartopyを使った基本的な書き方は以下の記事をご覧ください。

 

runtascience.hatenablog.com

 

 

 

それでは🌏

 

 

関連記事

 

runtascience.hatenablog.com