地球全体を、標高1m毎に別の色で塗り絵して地図を作ってみる。
前回作成した要領で、水深6000mから標高5500mまでのカラーマップを作成し
ETOPO1の標高値を使い
https://www.ngdc.noaa.gov/mgg/global/global.html
地球の全体を標高1m間隔を別の色で塗り絵してみる。
こんな感じ。
水深6000m以下は青、標高5500m以上は白。
また、水深6000mから標高5500mまでは以下のような配色のカラーグラデーションを生成し、標高・水深1m毎に異なる色を割り当てているので、総計11,502色で色分けしている感じです。
上を作成した時のソースは以下
#!/usr/bin/env python # -*- coding: utf-8 -*- from netCDF4 import Dataset import numpy as np import matplotlib.pyplot as plt import matplotlib.colors as colors from matplotlib import cm from sklearn import preprocessing def makecolormap(): # 基点となる標高での色を配列として定義する color = np.array([[-6000, '#0938BF'], [-2500, '#50D9FB'], [-1, '#B7E5FA'], [0, '#1F4806'], [100, '#68E36B'], [150, '#98D685'], [300, '#F9EFCD'], [800, '#E0BB7D'], [1000, '#D3A62D'], [2500, '#997618'], [3000, '#705B10'], [3500, '#5F510D'], [4000, '#A56453'], [5000, '#5C1D09'], [5500, 'snow']]) # 標高値を0..1の範囲に正規化 hight = color[:, 0].astype(np.float32) hightnorm = preprocessing.minmax_scale(hight) # 正規化した標高値と各色の組みのリストcolornormを生成 colornorm = [] for no, norm in enumerate(hightnorm): colornorm.append([norm, color[no, 1]]) # colornormに従いグラデーションカラーマップを作成 cmap = colors.LinearSegmentedColormap.from_list('a', colornorm, N=hight.max()-hight.min()+1) # カラーマップを割り当てる1m間隔の標高値 hightbounds = range(int(hight.min()), int(hight.max()+1)) return cmap, hightbounds # 水深・標高用カラーマップ作成 etopo1 = Dataset('ETOPO1_Bed_g_gmt4.grd','r') x=etopo1.variables['x'][:] y=etopo1.variables['y'][:] Z=etopo1.variables['z'][:] X, Y = np.meshgrid(x, y) # メッシュを間引く X=X[::10,::10] Y=Y[::10,::10] Z=Z[::10,::10] # 標高・水深地図を作成する fig = plt.figure(figsize=(40, 20), dpi=72, facecolor='w', edgecolor='k') plt.subplots_adjust(left=0, right=1, bottom=0, top=1) ax = fig.add_subplot(111) # 水深・標高用カラーマップ作成 cmap, hightbounds = makecolormap() cmap.set_over('white') cmap.set_under('darkblue') norm = colors.BoundaryNorm(hightbounds, cmap.N) # 標高・水深に応じて地形を塗りつぶす pcolor = ax.pcolor(X, Y, Z, norm=norm, linewidth=0, alpha=.7, cmap=cmap) #plt.savefig('1.jpg', dpi=72, facecolor="azure", bbox_inches='tight', pad_inches=0) plt.savefig('1.jpg', dpi=72) plt.show()
これに、海底地形き日本地図を作ってみた際の陰影起伏 (Hillshade)を加えれば、略々、ETOPO1に掲載の地球全体画像に等しい感じになるでしょうか。