気候等の複数要素特性の色表現手法
世界の気象データ(気温と降水量)から如何に類似性を評価するか
気候区分方法
世界の気候区分としては、気温と湿潤度に基づくケッペンの気候分類が知られるが、区分数は、30数個で、おおざっぱである。日本を分けると温帯、亜寒帯、亜熱帯の3つにしか分類されない。
この区分では類似性を評価するのは難しい。
Google検索してみたが、一般的な評価方法はなさそうなので、考えてみた。
参考になるかと思ったのが、
縦軸に、気温、横軸に、湿度をとって、月ごとのプロットをしたクリモグラフ(climatograph)で表現した区分もあるが、湿度データは取得しにくい。
下の、個人ブログであるが、月平均気温と月降水量の差分指標によるものである。
http://nyhoustl.pythonanywhere.com/index_en
月平均気温と月降水量は基本な指標であろう。
上記の指標は、丁寧ではあるが、24もの要素で構成され、複雑である。
クリモグラフを単純化し、気温と降水量を2,5,8,11の4ヶ月分又は2,8,等でプロットしてもよさそうである。
もっと言えば、①TY年平均気温、②TYD年間気温差、③RY年降水量 で概ねのことが表現されそうだ。
ケッペンの区分は、最暖月気温や最寒月気温や湿潤度等によって区分され、似た考え方である。
気候の特性は、この3つのパラメータを用いて、直接的に区分することでより精密な区分が可能と考える。また、直接的に色分けすることで明確化が図れる。
カラー設定の方法
R,G,Bで表現すると、どうだろうか?
R:TY G:TYD B:RY で割り当てる。
熱帯 100, 0,100 マゼンタ
温帯 50,100, 50 薄緑
寒帯 0, 50, 50 暗シアン
砂漠 100,100, 0 黄色
通常の色分けと類似性もあり、良さそう。仮にDRR式気候区分図と名付けよう。
HSL,HSV,CMY等、他のカラーモデルも含めて試してみる価値がありそうだ。
出力例
R:["TY", 0.0,30,6.0 ], #min,max,pit
G:["TYD", 0.0,20,4.0],
B:["RY", 0.0,2500,500.0],}
の6*6*6の216階調としてみた。
区分を増やしてみる。
R:["TY", -10.0,30,5.0 ], #min,max,pit
G:["TYD", 0.0,16,2.0],
B:["RY", 0.0,2800,350.0],}
の8*8*8の512階調としてみた。なかなかよいのではないか。
qml出力プログラム
QGISで、上のようなカラー設定は、自動ではできない。
qmlファイルをrubyで作ることとした。
#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
lmax=8;p=36.4286
colors=[*0..(lmax-1)].product([*0..(lmax-1)],[*0..(lmax-1)])
.map.with_index{|(iR,iG,iB),ic|
[ic.to_s,"#{iR}#{iG}#{iB}",*[iR,iG,iB].map{|i| [i*p,255].min.to_i.to_s}]}
print colors
fo=open(nfo="climat_rgb888.qml","w");ityp=0;name1="climt888";name2="climt";
#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
fo.print head= '<!DOCTYPE qgis PUBLIC \'http://mrcc.com/qgis.dtd\' \'SYSTEM\'>
<qgis version="3.4.7-Madeira" styleCategories="LayerConfiguration|Symbology" readOnly="0">
<flags>
<Identifiable>1</Identifiable>
<Removable>1</Removable>
<Searchable>1</Searchable>
</flags>
<renderer-v2 forceraster="0" symbollevels="0" attr="climt888" enableorderby="0" type="categorizedSymbol">
<categories>'
#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
fo.print list= colors.map.with_index{|color,ic|
value=color[1]
label=color[1]
' <category render="true" symbol="'+ic.to_s+'" value="'+value+'" label="'+label+'"/>'
}*"\n" fo.print qml_2=<<EOD
</categories>
<symbols>
EOD
#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
fo.print bodies=colors.map.with_index{|color,ic|
outline_style="solid"
outline_style="no"
rgba=(color[2,3]+["255"])*","
' <symbol alpha="1" clip_to_extent="1" force_rhr="0" name="'+ic.to_s+'" type="marker">
<layer locked="0" pass="0" enabled="1" class="SimpleMarker">
<prop v="0" k="angle"/>
<prop v="'+rgba+'" k="color"/>
<prop v="1" k="horizontal_anchor_point"/>
<prop v="bevel" k="joinstyle"/>
<prop v="circle" k="name"/>
<prop v="0,0" k="offset"/>
<prop v="3x:0,0,0,0,0,0" k="offset_map_unit_scale"/>
<prop v="MM" k="offset_unit"/>
<prop v="35,35,35,255" k="outline_color"/>
<prop v="'+outline_style+'" k="outline_style"/>
<prop v="0" k="outline_width"/>
<prop v="3x:0,0,0,0,0,0" k="outline_width_map_unit_scale"/>
<prop v="MM" k="outline_width_unit"/>
<prop v="diameter" k="scale_method"/>
<prop v="2" k="size"/>
<prop v="3x:0,0,0,0,0,0" k="size_map_unit_scale"/>
<prop v="MM" k="size_unit"/>
<prop v="1" k="vertical_anchor_point"/>
<data_defined_properties>
<Option type="Map">
<Option value="" name="name" type="QString"/>
<Option name="properties"/>
<Option value="collection" name="type" type="QString"/>
</Option>
</data_defined_properties>
</layer>
</symbol>'}*"\n"
#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
fo.print tail=<<EOD
</symbols>
<source-symbol>
<symbol alpha="1" clip_to_extent="1" force_rhr="0" name="0" type="marker"> <layer locked="0" pass="0" enabled="1" class="SimpleMarker">
<prop v="0" k="angle"/>
<prop v="243,166,178,255" k="color"/>
<prop v="1" k="horizontal_anchor_point"/>
<prop v="bevel" k="joinstyle"/>
<prop v="circle" k="name"/>
<prop v="0,0" k="offset"/>
<prop v="3x:0,0,0,0,0,0" k="offset_map_unit_scale"/>
<prop v="MM" k="offset_unit"/>
<prop v="35,35,35,255" k="outline_color"/>
<prop v="solid" k="outline_style"/>
<prop v="0" k="outline_width"/>
<prop v="3x:0,0,0,0,0,0" k="outline_width_map_unit_scale"/>
<prop v="MM" k="outline_width_unit"/>
<prop v="diameter" k="scale_method"/>
<prop v="2" k="size"/>
<prop v="3x:0,0,0,0,0,0" k="size_map_unit_scale"/>
<prop v="MM" k="size_unit"/>
<prop v="1" k="vertical_anchor_point"/>
<data_defined_properties>
<Option type="Map">
<Option value="" name="name" type="QString"/>
<Option name="properties"/>
<Option value="collection" name="type" type="QString"/>
</Option>
</data_defined_properties>
</layer>
</symbol>
</source-symbol>
<rotation/>
<sizescale/>
</renderer-v2>
<blendMode>0</blendMode>
<featureBlendMode>0</featureBlendMode>
<previewExpression>id</previewExpression>
<layerGeometryType>0</layerGeometryType>
</qgis>
EOD
print nfo
気候の類似性評価
気候の類似性を評価する指標は、上の、R,G,Bの指標値を用い、空間距離を算定すればよい。指標の重みを付けることも考えられる。