そういえば、昔のブログ時代には初心者向けにクリスマスツリーを描くスクリプトを紹介していました。
今回はその復刻版です。
クリスマスツリーを描く
今回は季節外れのクリスマスツリーを描いてみます。
これを描くためには、
- グラフの枠を描く
- 葉の輪郭を描き緑色に塗りつぶす
- 幹の輪郭を描き茶色に塗りつぶす
- 星とリースを付ける
の4ステップです。順番にのんびりやっていきましょう。
グラフの枠を描く
何か図を描く際は原則gmt basemapから書き始めましょう。儀式です。
今回は15cm*15cmの図を作成します。範囲はX軸・Y軸ともに0~100とすればいいでしょう。グラフの場合は-JXとします。
#!/bin/bash
gmt begin christmas png
gmt basemap -JX15 -R0/100/0/100 -Bafg -BWSNE+t"Christmas_Tree"
gmt end
- gmt basemap -JX15 -R0/100/0/100 -Bafg -BWSne+t"Christmas_Tree"
- グラフの枠を描きます!
- -JX15 : 図の大きさは15cm平方です。 ←-JX15/15でも可だが、平方の図を書く際は省略可能。
- -R0/100/0/100 : X軸は0から100まで、Y軸は0から100まで値を取ってください!
- -Bafg : X軸もY軸も目盛間隔はGMTにお任せします。 ←-Bxafg -Byafgでも-Bxyafgでも可。
- -BWSne+t"Christmas_Tree" : 目盛りと軸ラベルは下(南)と左(西)に書いてください。「Christmas_Tree」というタイトルも付けてください!
葉の輪郭を描き緑色に塗りつぶす
葉っぱ部分の輪郭を描いてみよう。何か線や記号を描く際はgmt plotを使います。
先ほどのスクリプトを以下のように書き変えてみます。
#!/bin/bash
gmt begin christmas_tree png
gmt basemap -JX15 -R0/100/0/100 -Bagf -BWSne+t"Christmas_Tree"
gmt plot -L -W1,black << END
50 90
30 70
35 70
10 40
90 40
65 70
70 70
END
gmt end
- gmt plot -L -W1,black << END
- 直線や記号を描きます!
- -L : 「最初の座標」と「最後の座標」を結んで閉じた多角形にしてください。
- -W1,black : 線の太さは1ポイント。黒で描いてください!
- << END : 線を引いてほしい座標は次の行からENDが現れるところまでです!
これを緑色に塗りつぶすには、gmt plotに-Gを書き加えます。
#!/bin/bash
gmt begin christmas_tree png
gmt basemap -JX15 -R0/100/0/100 -Bagf -BWSne+t"Christmas_Tree"
gmt plot -L -W1,black -Ggreen << END
50 90
30 70
35 70
10 40
90 40
65 70
70 70
END
gmt end
- gmt plot -L -W1,black -Ggreen << END
- 直線や記号を描きます!
- -L : 「最初の座標」と「最後の座標」を結んで閉じた多角形にしてください。
- -W1,black : 線の太さは1ポイント。黒で描いてください!
- -Ggreen : 閉じた多角形の中をgreenで塗りつぶしてください!
- << END : 線を引いてほしい座標は次の行からENDが現れるところまでです!
幹の輪郭を描き茶色に塗りつぶす
これは葉を描いたときと同じ要領です。
#!/bin/bash
gmt begin christmas_tree png
gmt basemap -JX15 -R0/100/0/100 -Bagf -BWSne+t"Christmas_Tree"
gmt plot -L -W1,black -Ggreen << END
50 90
30 70
35 70
10 40
90 40
65 70
70 70
50 90
END
gmt plot -L -W1,Black -Gbrown << END
40 40
40 20
60 20
60 40
END
gmt end
-
gmt plot -L -W1,black -Ggreen << END
- 直線や記号を描きます!
- -L : 「最初の座標」と「最後の座標」を結んで閉じた多角形にしてください。
- -W1,black : 線の太さは1ポイント。黒で描いてください!
- -Ggreen : 閉じた多角形の中をgreenで塗りつぶしてください!
- << END : 線を引いてほしい座標は次の行からENDが現れるところまでです!
-
gmt plot -L -W1,Black -Gbrown << END
- 直線や記号を描きます!
- -L : 「最初の座標」と「最後の座標」を結んで閉じた多角形にしてください。
- -W1,black : 線の太さは1ポイント。黒で描いてください!
- -Gbrown : 閉じた多角形の中をbrownで塗りつぶしてください!
- << END : 線を引いてほしい座標は次の行からENDが現れるところまでです!
ここで、
-
座標を指定する方法は標準入力を用いても問題ない。すなわち、
echo -e "40 40\n40 20\n60 20\n60 40" | gmt plot -W1,black -Gbrown
でも動く。 -
座標は外部ファイルからでも読み込む。
たとえば、tree.csvとかのファイルに座標データが格納されている場合は、
gmt plot tree.csv -W1,black -Gbrown
でOK。座標は「X,Y」の順番にすること。
ことを覚えておきましょう。
星とリースを付ける
クリスマスツリーなので星を飾ろう。
上のスクリプトを以下のように書き足す。
#!/bin/bash
gmt begin christmas_tree png
gmt basemap -JX15 -R0/100/0/100 -Bagf -BWSne+t"Christmas_Tree"
gmt plot -L -W1,black -Ggreen << END
50 90
30 70
35 70
10 40
90 40
65 70
70 70
50 90
END
gmt plot -L -W1,Black -Gbrown << END
40 40
40 20
60 20
60 40
END
gmt plot -Sa2.0 -W1,black -Gyellow << END
50 90
END
gmt end
それっぽくなってきましたね!
記号を描くときもgmt plotを用います。
- gmt plot -Sa2.0 -W1,black -Gyellow << END
- 直線や記号を描きます!
- -Sa2.0 : 直径2.0cmの星を描いてください!
- -W1,black : 線の太さは1ポイントで、黒色にしてください!
- -Gyellow 星の中身をyellowで塗りつぶしてください!
- << END : 星を描く座標は次の行からENDが現れるところまでです!
というわけで最後にリースを付けます。円形は-Scで描けます。
#!/bin/bash
gmt begin christmas_tree png
gmt basemap -JX15 -R0/100/0/100 -Bagf -BWSne+t"Christmas_Tree"
gmt plot -L -W1,black -Ggreen << END
50 90
30 70
35 70
10 40
90 40
65 70
70 70
50 90
END
gmt plot -L -W1,Black -Gbrown << END
40 40
40 20
60 20
60 40
END
gmt plot -Sa2.0 -W1,black -Gyellow << END
50 90
END
gmt plot -Sc1.0 -W0.05,black -Gred << END
40 65
END
gmt plot -Sc1.0 -W0.05,black -Gblue << END
60 50
END
gmt end
完成です!
-
gmt plot -Sc1.0 -W0.05,black -Gred << END
- 直線や記号を描きます!
- -Sa2.0 : 直径1.0cmの円を描いてください!
- -W1,black : 線の太さは1ポイントで、黒色にしてください!
- -Gred 円の中身をredで塗りつぶしてください!
- << END : 円を描く座標は次の行からENDが現れるところまでです!
-
gmt plot -Sc1.0 -W0.05,black -Gblue << END
- 直線や記号を描きます!
- -Sa2.0 : 直径1.0cmの円を描いてください!
- -W1,black : 線の太さは1ポイントで、黒色にしてください!
- -Gblue 円の中身をblueで塗りつぶしてください!
- << END : 円を描く座標は次の行からENDが現れるところまでです!
どうでしょうか?ちゃんと付いてこられましたか?
gmt basemap も gmt plot もGMTの基礎的なコマンドです。必ず覚えるようにしましょう!
コメント