スポンサーリンク
スポンサーリンク

【GMT】plotでランダム色を設定する

スポンサーリンク
スポンサーリンク
スポンサーリンク
スポンサーリンク
gmtcolors — GMT 6.6.0 documentation
スポンサーリンク
スポンサーリンク

連番のグラフデータを図示したい

No.1からNo.50までの連番の解析データがあった際にNo.1~No.50を1枚のグラフに図示したい時がありませんか?
hogehoge_no1.datからhogehoge_no50.datまでの連番ファイルがあって、これらを1枚の絵に図示したい、、とかです。

#!/bin/bash
for i in `seq 1 50`
do
    # 1~100までのランダムな値を4つ生成
    a=$(( $RANDOM % 100 + 1 ))
    b=$(( $RANDOM % 100 + 1 ))
    c=$(( $RANDOM % 100 + 1 ))
    d=$(( $RANDOM % 100 + 1 ))
    echo -e "$a $b \n$c $d" > hoge_$i.txt
done

として、このhoge_1.txt~hoge_50.txtまでの連番のグラフデータを1枚の絵に図示してみましょう。

まず1つのデータをグラフに図示する(復習)

これは簡単です。hoge_1.txtを例にすれば、

for i in `seq 1 50`
do
    # 1~100までのランダムな値を4つ生成
    a=$(( $RANDOM % 100 + 1 ))
    b=$(( $RANDOM % 100 + 1 ))
    c=$(( $RANDOM % 100 + 1 ))
    d=$(( $RANDOM % 100 + 1 ))
    echo -e "$a $b \n$c $d" > hoge_$i.txt
done
# GMT
gmt begin hogehoge png
    gmt basemap -JX12 -R0/100/0/100 -Bafg -BWSne
    gmt plot "hoge_1.txt" -W0.25,red
gmt end 

とすれば、

※ランダムな数値なので実行するたびに毎回変わります

と出力できます。ここまでは簡単。

ランダム色を作る

The color can be specified in five different ways:

  • Gray. Specify a gray shade in the range 0–255 (linearly going from black [0] to white [255]).
  • RGB. Specify r/g/b, each ranging from 0–255. Here 0/0/0 is black, 255/255/255 is white, 255/0/0 is red, etc. Alternatively, you can give RGB in hexadecimal using the #rrggbb format.
  • HSV. Specify hue-saturation-value, with the former in the 0–360 degree range while the latter two take on the range 0–1 17.
  • CMYK. Specify cyan/magenta/yellow/black, each ranging from 0–100%.
  • Name. Specify one of 663 valid color names. See gmtcolors for a list of all valid names. A very small yet versatile subset consists of the 29 choices white, black, and [light|dark]{red, orange, yellow, green, cyan, blue, magenta, gray|grey, brown}. The color names are case-insensitive, so mixed upper and lower case can be used (like DarkGreen).

要は、ファイルごとに色を分ければ見分けがつきますね。

plotRGBでも色を設定できることに着目しましょう。すなわち、

#!/bin/bash
# 16進法のRGBをランダムに100色作成して配列に格納する
for i in `seq 1 100`
do
    color[$i]=$(printf "%02x%02x%02x" $(($RANDOM%256)) $(($RANDOM%256)) $(($RANDOM%256)))
done

とすれば、ランダムに色を設定することができます。
よって、

#!/bin/bash
for i in `seq 1 50`
do
    # 1~100までのランダムな値を4つ生成
    a=$(( $RANDOM % 100 + 1 ))
    b=$(( $RANDOM % 100 + 1 ))
    c=$(( $RANDOM % 100 + 1 ))
    d=$(( $RANDOM % 100 + 1 ))
    echo -e "$a $b \n$c $d" > hoge_$i.txt
done
# 16進法のRGBをランダムに100色作成して配列に格納する
for i in `seq 1 100`
do
    color[$i]=$(printf "%02x%02x%02x" $(($RANDOM%256)) $(($RANDOM%256)) $(($RANDOM%256)))
done
# GMT
gmt begin hogehoge png
    gmt basemap -JX12 -R0/100/0/100 -Bafg -BWSne
    for i in `seq 1 50`
    do
        gmt plot "hoge_$i.txt" -W0.5,"#"${color[${i}]}
    done
gmt end 

とすれば、

とできます。微妙!

凡例

gmt legendの使い方
GMTのlegendモジュールについて説明しています。

これだと見る側がしんどいので、凡例を付けてあげましょう。
線はおまかせモードで凡例がつけれられるので、

#!/bin/bash
for i in `seq 1 50`
do
    # 1~100までのランダムな値を4つ生成
    a=$(( $RANDOM % 100 + 1 ))
    b=$(( $RANDOM % 100 + 1 ))
    c=$(( $RANDOM % 100 + 1 ))
    d=$(( $RANDOM % 100 + 1 ))
    echo -e "$a $b \n$c $d" > hoge_$i.txt
done
# 16進法のRGBをランダムに100色作成して配列に格納する
for i in `seq 1 100`
do
    color[$i]=$(printf "%02x%02x%02x" $(($RANDOM%256)) $(($RANDOM%256)) $(($RANDOM%256)))
done

gmt begin hogehoge png
    gmt basemap -JX12 -R0/100/0/100 -Bafg -BWSne
    for i in `seq 1 50`
    do
        gmt plot "hoge_$i.txt" -W0.5,"#"${color[${i}]} -l"No.$i"
    done
    gmt legend -DJTR+jTL+o0.5/0 -F+pblack+gwhite
gmt end 

とすると、

となります。(微妙!)

でも、1個のグラフに図示するのは、せいぜい10個くらいでしょうから、
だいぶ見やすくなると思います。

今回はここまで。

コメント

スポンサーリンク