🏝️

plotlyでGEBCOの地形データを可視化してみる

2023/10/05に公開

イントロダクション

plotlyはインタラクティブなグラフを描けるPythonのライブラリです。こちらの記事を拝見して、GEBCOの地形データをsurface plotで表示してみたいと思ったので試してみました。
https://qiita.com/tmiyama/items/bba94d4125d9b67edf84
伊豆諸島のあたりを表示してみた結果がこちらです!(中央奥は伊豆半島)
海底と比べると島ってすごく高いんだなと感じますね🏝️

動作環境

  • Python 3.10.12
  • netCDF4 1.6.4
  • plotly 5.15.0

データのダウンロード

GEBCOはパブリックドメインのグローバルな地形データで、こちらのページからデータをダウンロードできます。いくつかの形式でダウンロードできるのですが、今回はnetCDF形式を選択しました。

コードと説明

import netCDF4 as nc
import plotly.graph_objects as go

from scicolorscales import *

# 'downloaded_data.nc'は、GEBCOからダウンロードしたファイル名(拡張子が".nc")に置き換える
nc_file = nc.Dataset('downloaded_data.nc', 'r')
longitude = nc_file.variables['lon'][:]
latitude = nc_file.variables['lat'][:]
elevation = nc_file.variables['elevation'][:]

fig = go.Figure(data=[go.Surface(z=elevation, x=longitude, y=latitude, showscale=False, colorscale=vik, cmin=-1000, cmax=1000)])
fig.show()

netCDFの読み込み

netCDFから値を取り出すのに、netCDF4ライブラリを使用しています。経度・緯度・標高のデータが格納されているので、それらをx・y・z軸の値として読み込んで描画しました。正確には平面直角座標系などに座標系を変換したほうが良いのでしょうが、今回はそのまま使っています。

カラーパレット

カラーパレットにはScientific colour maps[1]を使用しました。perceptually uniformで色覚異常の方にも見やすいとされています。plotlyで使用するにあたり、こちらで公開されているモジュールをダウンロードして、メインのコードと同じ階層に配置しました。今回は"vik"を使用しましたが、その他に使えるカラーパレットはこちらで確認できます[2]

脚注
  1. Crameri, F. (2018). Scientific colour maps. Zenodo. http://doi.org/10.5281/zenodo.1243862 ↩︎

  2. Scientific colour mapsの全てのカラーパレットがこのモジュールで使えるわけではないので(例えば、"bukavu"などは含まれていません)、使用したいカラーパレットがない場合は別の方法で導入する必要があります。User guideを参照してください。https://www.fabiocrameri.ch/colourmaps-userguide/ ↩︎

Discussion