データの扱い
netCDF を読み込んだあと、ClimCanvas がどの座標を緯度・経度・鉛直・時刻とみなし、どの次元を固定し、どの範囲を描くかを説明します。ファイルの読み込み操作そのものは基本操作を参照してください。選択・切り出し・平均・欠損の数値上の前提は計算の前提に一覧があります。
座標と次元
netCDF の「次元」と「座標変数」は別のものです。ClimCanvas は xarray の座標変数を座標、次元を次元として扱い、両者が同じ名前で対応しているのが普通の形です。座標の値は配列の実際の値をそのまま使うので、等間隔でなくてもかまいません。
座標変数を持たない次元 (bare dims) は「ファイル情報」に「座標変数を持たない次元 (bare dims)」として表示され、次のように扱われます。
- 1次元プロットの横軸には使えません。座標を持つ次元が 1 つも無いデータでは 1次元プロットは描けません。
- 水平断面図・断面図の固定の対象にはなりません。
- ヒートマップと集計系のレイヤーでは「固定: {次元} (index)」に添字 (0 から) を入れて固定します。ヒートマップの軸に使うと目盛りは添字になります。
- 散布図は x と y の変数に共通する座標付きの次元を「描画する次元」にするので、共通の座標次元が無いと描けません。
複数のファイルを読み込んだときは、先頭のファイル (ds0) の次元名を正として、他のファイルで同じ役割を持つ次元 (例: latitude と lat) を同じ名前に揃えます。揃えるのは名前だけで、座標の値は比較しません。
座標役割の自動認識
読み込み時に、座標変数ごとに緯度 (lat) / 経度 (lon) / 鉛直 (vertical) / 時刻 (time) の役割を判定します。判定は座標変数 1 つずつに対して時刻 → 緯度 → 経度 → 鉛直の順で試し、各役割の条件はどれか 1 つが当てはまれば採用します。同じ役割に複数の座標が当てはまるときは最初に見つかったものだけを使います。
| 役割 | 判定条件 (いずれか) |
|---|---|
| 時刻 | 値が日時型 (datetime64)、standard_name が time、axis が T、名前が time / times / date / year |
| 緯度 | standard_name が latitude、units が degrees_north 系、axis が Y、名前が lat / latitude / ylat / nav_lat |
| 経度 | standard_name が longitude、units が degrees_east 系、axis が X、名前が lon / longitude / xlon / nav_lon |
| 鉛直 | axis が Z、positive 属性がある、名前が lev / level / plev / pres / pressure / height / altitude / depth / isobaric など、または units が hPa / Pa / mb / m / km で名前が緯度・経度でない |
名前と属性の比較は大文字・小文字を区別しません。判定結果は「ファイル情報」の「座標の自動認識 (ds0)」に出ます。判定できなかった役割は「(なし)」になり、その役割を使う描画モードは選択肢から消えます。
| 描画モード | 現れる条件 |
|---|---|
| 水平断面図 | 緯度と経度の役割がある (または経緯度の変数を持つトラックデータ) |
| 鉛直断面図 | 鉛直と、緯度か経度の役割がある (2 次元座標の格子では格子の行・列、等緯度線・等経度線、大円に沿った断面) |
| 時間断面図 | 時刻と、鉛直・緯度・経度のいずれかの役割がある。2 次元座標の格子では出ない |
| 1次元プロット | 座標変数を持つ次元が 1 つ以上ある |
| 1次元プロット(集計)、2次元プロット(集計) | 緯度・経度を次元に持たない数値変数がある (地点データなど) |
| 2次元プロット | データ変数が 1 つ以上ある |
どのモードも出せないときは「描画可能な座標の組み合わせが見つかりません。」と表示して止まります。役割が外れる原因の多くは変数の名前と属性です。ファイル側で座標の名前や units を直すのが確実な対処で、時刻だけは次の項でアプリ内から指定できます。
時刻として扱う次元
「ファイル情報」の「時刻として扱う次元」で、自動では時刻と認識されない数値の次元 (ラグ相関の lag 軸など) を時刻役割にできます。選択肢は先頭ファイルの座標変数を持つ 1 次元の次元で、既定は「(自動認識に従う)」です。
- 指定すると全ファイルでその次元が時刻役割になり、時刻送り、アニメーション、時間断面図がこの次元で使えるようになります。
- 指定はメモリ上の目印で、ファイルには書き込まれません。セッションには保存されます。
- 数値の時刻軸なので、日付の書式 (strftime) の指定は出ません。
unitsが days などの時間差を表す座標は、日時型に変換せず数値のまま読みます。
2 次元座標 (曲線格子)
緯度と経度がともに 2 次元 (例: lat(y, x)、lon(y, x)) で同じ 2 つの次元を持つデータは、2 次元座標の格子として扱います。領域モデルのランベルト格子や海洋モデルの格子がこれに当たります。経緯度が別ファイルにあるときは座標ファイルで結び付けます。
- 座標ファイルの中の経度・緯度の変数は
unitsや名前から自動で見つけ、本体の次元と長さが一致することを確かめてから、位置で対応付けます (格子番号の始まりが 0 か 1 かは問いません)。 - 経緯度からランベルト正角円錐図法 (または極ステレオ図法) の中心経度と標準緯線を推定し、当てはまれば「投影法・領域」の初期値にします。認識したときは「格子の投影法を自動認識: …」と表示されます。
-
領域を指定しないときは全格子点を含む長方形 (余白なし) を表示します。緯度経度で絞るときは「緯度経度範囲を指定」を入れます。範囲内の格子点を含む外接矩形で切り出します。
-
鉛直断面図は、格子の行・列に沿った断面と、等緯度線・等経度線・2 点間の大円に沿って内挿する断面が描けます (鉛直断面図、内挿の仕組みは経路断面の内挿)。
2 次元座標の格子でできないこと
時間断面図 (緯度・経度を軸にする断面)、緯度・経度の範囲平均、経度の周期点の付加は使えません。 ベクトルの成分は東西・南北成分とみなします (格子に沿った成分の回転はしません)。 経緯度の値に NaN が含まれる格子 (海洋モデルの陸面など) が描画範囲に入るとエラーになります。
次元の固定
描画する2次元(あるいは1次元)以外の次元は、値を 1 つに固定するか、範囲で平均します。固定にはパネル側とレイヤー側の 2 段階があります。
| 段階 | 対象 | 場所 |
|---|---|---|
| パネル側 | 時刻 (全レイヤー共通。アニメーションで動く) | サイドバーの「時刻」の節 |
| レイヤー側 | 鉛直層、緯度、経度など、レイヤーごとに違ってよい次元 | 各レイヤーの設定の中 |
同じ次元を両方で指定したときはレイヤー側が優先されます。モードごとの振り分けは次のとおりです。
| 描画モード | パネル側 | レイヤー側 |
|---|---|---|
| 水平断面図 | 時刻 | 鉛直層など水平面以外の次元 |
| 鉛直断面図 | 時刻 | 固定する緯度または経度 |
| 時間断面図 | なし | 断面に使わない次元すべて (緯度・経度は範囲平均も可) |
| 1次元プロット | 時刻 (横軸が時刻でないとき) | 横軸以外の次元 |
| 2次元プロット、集計系 | なし | すべてレイヤー側 (時刻も含む) |
「時刻」の節の内容です。
- 「◀ 前の時刻」「次の時刻 ▶」と「時刻 ({次元名})」で時刻を選びます。既定は先頭の時刻です。日時は
2024-01-01T00:00:00の形で表示されます。 - 「時刻を表示」→「プロット上部に時刻を表示」で、選んだ時刻を図の上に書きます。「位置」は左 / 中央 / 右、「時刻の書式」は 自動 / 年 / 年-月 / 年-月-日 / 月/日 / 時:分 / カスタム… から選び、カスタムでは strftime の書式 (
%Y年、%m月、%d日、%H時、%M分) を書きます。書式の指定は日時型の座標のときだけ出ます。 - 時刻以外の次元は「{次元名} [{単位}]」の選択欄で値を選びます。初期値は、鉛直層は最下層 (気圧なら最大値、高度なら最小値)、緯度は 0° に、経度は 180° に最も近い格子点です。

レイヤー側の固定では、断面図などで次元ごとに「固定値」と「範囲平均」を選べます。
- 範囲平均は xarray の
meanと同じで、NaN を除いて平均します (範囲内 10 点のうち 2 点が NaN なら残り 8 点の平均)。 - 経度の範囲は「min」「max」に数値で入れます。-30 や 330 のようにデータの規約と違う値も入力でき、min が max より大きいときは日付変更線をまたぐ範囲 (330 → 30 なら 30W〜30E) として扱います。経度以外の次元はスライダーで範囲を選びます。
- 緯度には「cos(lat) 重み付き」があり、面積要素で重み付けした平均にします。
- 鉛直層と文字列の座標は固定値だけです。
散布図とバブルチャートでは、描画する次元以外を各レイヤーで固定します (初期値は中央の添字)。集計系のレイヤーでは「集計する次元」を選び、「集計する範囲を指定」で期間や区間を絞れます。
範囲の指定
水平断面図
「投影法・領域」→「緯度経度範囲を指定」を入れると、「経度 最小」「経度 最大」「緯度 最小」「緯度 最大」で表示範囲を決めます。
- 領域データ (全球でないデータ) とランベルト図法では既定で有効、全球データでは既定で無効です。極ステレオ図法では常に有効です。初期値は領域データならデータの範囲、全球データの極ステレオなら緯度 0〜90 (南は -90〜0)、ランベルトなら緯度 0〜65、経度 100〜180 です。
- 表示範囲は指定どおりですが、データの切り出しは境界で塗りが切れないよう両側に 1 格子分広げます。色の自動範囲はこの広めの切り出しに基づきます。レイヤーの範囲平均は指定範囲ちょうどで計算します。
- 経度は 0〜360 でも -180〜180 でも指定でき、日付変更線をまたぐ範囲 (例: 60〜200) も使えます。幅が 360° 以上なら全経度です。
- Orthographic 図法では表示範囲の制限は効きません (データの切り出しだけ行います)。
鉛直断面図・時間断面図
- 鉛直断面図は「断面」の「高度・気圧レベル範囲」と「経度範囲」(または「緯度範囲」) のスライダーで範囲を選びます。
- 時間断面図は「時間断面の種類」の「時刻範囲」で期間を選びます。時間 × 緯度、時間 × 経度の図は Hovmöller 図の慣例に従い、時間を縦軸 (下向き) にとります。
1次元プロット
「プロット軸」の「軸」で横軸の次元を選び、「範囲」のスライダーと入力欄で範囲を決めます。スライダーと入力欄は連動します。
- 時刻軸の入力欄は ISO 形式 (
2024-01-01や2024-01-01T12:00) で、最寄りの時刻に丸めます。 - 数値軸の入力欄の値はそのまま範囲に使い、格子点には丸めません。
- 複数のファイルを読んでいるときは、全ファイルの座標を合わせた範囲から選べます (期間の続く別ファイルを重ねる場合)。
- 文字列の座標には範囲指定はありません。
座標が降順 (気圧が 1000 → 200、緯度が 90 → -90 など) でも、範囲は小さい値と大きい値の順で扱えます。向きは座標に合わせて自動で決まります。
経度の周期化
- 水平断面図では、経度が全周を覆う 1 次元の格子 (例: 0 〜 357.5 の 2.5° 格子) を自動で判定し、0° と 360° の継ぎ目を閉じるための周期点を付けます。対象は塗りつぶし、ハッチ、等値線です。ベクトル、流線、散布図 (点)、トラックには付けません。
- 全周のデータは領域を指定しても経度方向を切り出さないので、どの経度範囲でも継ぎ目や隙間なく描けます。
- 経度の規約 (0〜360 と -180〜180) はどちらでも同じ図になります。範囲平均の経度範囲はデータの規約に合わせて正規化します。
- 2 次元座標の格子で、隣の列で 179 → -179 のように 180° をまたぐ経度は、描く前に連続な値に直します。
- 断面図で横軸が経度のときは「軸・ラベル」→「軸」→「x軸 (経度) を東経・西経表記にする」で、180° を中心に 120°E … 180° … 120°W の表記にできます。
- 1次元プロットで横軸が経度のときは「プロット軸」→「x軸を周期的に展開 (360°を超えて表示)」で、データを 360° 周期で繰り返して描き、データの範囲を超えた範囲を指定できます (既定はデータの最小値からデータの最大値 + 360)。
欠損値
ClimCanvas は欠損値の判定を自分では行いません。netCDF の属性に従って xarray が NaN にした値をそのまま matplotlib に渡し、matplotlib が描画を飛ばします。
| ファイル側の宣言 | 結果 |
|---|---|
_FillValue または missing_value がある |
NaN になり、描かれない |
valid_range / valid_min / valid_max だけ |
値のまま描かれる (範囲外の値も) |
| 何もない | 値のまま描かれる |
- 整数型の変数に
_FillValueがあると、読み込み時に浮動小数点型になって NaN が入ります。 - 属性を付けずに -9999 や 1e20 を欠損の印にしているファイルは、その値がそのまま描かれます。ファイル側で属性を付けるか、前処理で NaN にしてください。
- 塗りつぶし (contourf) は有効な格子点の中心までしか塗りません。海岸線のすぐ海側で値が欠損しているデータでは、海岸線との間に細い帯が背景色で残ることがあります。陸のセルにも値が入っているデータでは、逆にデータが陸にはみ出します。後者は「地図・グリッド線」→「陸域を塗りつぶす」→「データの上に描く」で隠せます (描画モード)。
- 変数の値がすべて NaN のときは「変数の値がすべて欠損 (NaN) のため、色レベルを自動決定できません」、値が一定のときは等間隔レベルを決められないというエラーになります。レベルか値の範囲を手動で指定してください。
- 範囲平均は NaN を除いて計算します。散布図・バブルチャート・散布図 (点)・トラックは x や y が NaN の点を除きます。
時刻軸と暦
時刻座標は読み込み時に次のように扱います。暦はファイルの calendar 属性で決まります。
| 暦 | 扱い |
|---|---|
| standard / gregorian / proleptic_gregorian / noleap (365_day) | 日時型 (datetime64) に変換する。日付の書式指定が使える |
| 360_day / all_leap (366_day) | 開始年からの通し日数の数値軸にする (単位 day) |
| 上記のうち日時型で表せない年 (0000 年のダミー時刻や古気候データ) | 先頭時刻からの経過日数の数値軸にする |
- 数値軸になっても、時刻の選択、前後送り、アニメーション、時間断面図はそのまま使えます。日付の書式 (strftime) と ISO 形式の入力は日時型のときだけ使えます。
- 上の表にない暦は変換の対象外です。
- 再現スクリプトにも同じ変換が書き出されるので、スクリプトの図もアプリと同じになります。
unitsが days などの時間差を表す座標 (ラグ軸など) は日時に変換せず、数値のまま読みます。- 時間断面図で時間を縦軸にとるときは、縦軸の反転が既定で有効です。