Pythonでアニメーションマップを作成しました。アニメーションマップが作成出来ればよかったので、題材は「海外在留邦人数調査統計」の2005年~2017年までの遷移にしました。こんな感じです。
まさか、まさかの、、あまり大きな変化なし。。人数は増えていっているんです。微妙に直径が大きくなってるの、分かりません??でもアニメーションにするには題材が弱かった・・・
弱かった・・・
目次
気を取り直して、ソース
def create_national_map(): fontname = 'Open Sans' fontsize = 28 year_x = 0 year_y = -50 start_year = 2002 end_year = 2017 df = pd.read_excel('NationalsOverseasData.xlsx','data',header=0) print(df.head()) os.environ['CARTOPY_USER_BACKGROUNDS'] = const.FOLDER_CARTOPYBG fig = plt.figure(figsize=(19.2, 10.8)) ax = plt.axes(projection=ccrs.Mercator(central_longitude=0, min_latitude=-65, max_latitude=70)) for year in range(start_year ,end_year+1): ax = make_map_plot(year, df, ax=ax, resolution='low') # Date text ax.text(year_x, year_y, f"{year:04d}", color='white', fontname=fontname, fontsize=fontsize*1.3, transform=ccrs.PlateCarree()) fig.tight_layout(pad=-0.5) fig.savefig(f"frames/frame_{year:04d}.png", dpi=100, frameon=False, facecolor='black') ax.clear() def make_map_plot(year, df , ax=None, resolution='low'): if ax is None: fig = plt.figure(figsize=(19.2, 10.8)) ax = plt.axes(projection=ccrs.Mercator(min_latitude=-65, max_latitude=70)) ax.background_img(name='BM', resolution=resolution) ax.set_extent([-170, 179, -65, 70], crs=ccrs.PlateCarree()) # http://www.hp-stylelink.com/news/2013/07/20130708.php colors = { 'Ⅰ アジア': '#d5848b', 'Ⅱ 大洋州': '#ae8dbc' , 'Ⅲ 北米': '#f8e352', 'Ⅳ 中米': '#e1cea3', 'Ⅴ 南米': '#c8d627', 'Ⅵ 西欧': '#c3cfa9', 'Ⅶ 東欧・旧ソ連': '#66b7ec', 'Ⅷ 中東': '#c08e47', 'Ⅸ アフリカ': '#e5ab47', 'Ⅹ 南極': '#7b9ad0', } for index, row in df.iterrows(): area = row['Area'] longs = row['lon'] lats = row['lat'] sizes = row[year]/20 ax.scatter(longs, lats, s=sizes, color=colors[area], alpha=0.8, transform=ccrs.PlateCarree()) return ax
画像はNASAデータのをダウンロードしました。画像の置き場所はCARTOPY_USER_BACKGROUNDS環境変数の場所に置く必要があります。CARTOPY_USER_BACKGROUNDSの場所は管理しやすい場所にしやすかったので、以下で指定します。
os.environ['CARTOPY_USER_BACKGROUNDS'] = const.FOLDER_CARTOPYBG
同フォルダにimage.jsonを配置する必要があります。
{"__comment__": "JSON file specifying the image to use for a given type/name and resolution. Read in by cartopy.mpl.geoaxes.read_user_background_images.", "BM": { "__comment__": "Blue Marble Next Generation, July ", "__source__": "https://neo.sci.gsfc.nasa.gov/view.php?datasetId=BlueMarbleNG-TB", "__projection__": "PlateCarree", "low": "RenderData.jpg" }, }
とっても簡単にできますね!すごい!
データを集める方が大変だったんですが、、これを使ってもっとカッコいいアニメーションマップ作成できるようになりたいですね。もっと有益で大量に取得出来るデータを集めて再トライしようと思います。
コメント