【Perl】エスケープシーケンスによるターミナルのカラーリング(ヒートマップ用途)
2019-03-19-2
[Perl][Programming]
作業メモ的な話。
ヒートマップに使いたいので、ターミナルエミュレータで出せる色について調べて、簡単なプログラム書いて確認した。
Macのターミナルでも、Windowsのteratermでも出るやつ。
ヒートマップに使いたいので、ターミナルエミュレータで出せる色について調べて、簡単なプログラム書いて確認した。
Macのターミナルでも、Windowsのteratermでも出るやつ。

ソース (perl)
#!/usr/bin/env perl # -*- coding: utf-8 -*- use strict; use warnings; sub rgb2code { my ($r, $g, $b) = @_; my $v = $r * 36 + $g * 6 + $b + 16; return $v; } ########## print "基本色:暗め、明るめ\n"; ########## for (my $i = 0; $i <= 7; $i++) { my $v = $i; printf("\033[48;5;%dm %02X,%3d \033[0m", $v, $v, $v); } print "\n"; for (my $i = 8; $i <= 15; $i++) { my $v = $i; printf("\033[48;5;%dm %02X,%3d \033[0m", $v, $v, $v); } print "\n"; print "\n"; ########## print "グレースケール\n"; ########## for (my $i = 232; $i <= 255; $i++) { my $v = $i; printf("\033[48;5;%dm %02X \033[0m", $v, $v); } print "\n"; print "\n"; ########## print "数値順 (Hex,Dec,RGB)\n"; ########## for (my $r = 0; $r <= 5; $r++) { for (my $g = 0; $g <= 5; $g++) { for (my $b = 0; $b <= 5; $b++) { my $v = rgb2code($r, $g, $b); printf("\033[48;5;%dm %02X,%3d,%s \033[0m", $v, $v, $v, $r.$g.$b); } print "\n"; } } print "\n"; ########## print "色相環の配列:赤から紫へ\n"; ########## my ($r, $g, $b) = (5, 0, 0); for ($g = 0; $g <= 5; $g++) { my $v = rgb2code($r, $g, $b); printf("\033[48;5;%dm %02X,%3d,%s \033[0m\n", $v, $v, $v, $r.$g.$b); } $g = 5; for ($r = 4; $r >= 0; $r--) { my $v = rgb2code($r, $g, $b); printf("\033[48;5;%dm %02X,%3d,%s \033[0m\n", $v, $v, $v, $r.$g.$b); } $r = 0; for ($b = 1; $b <= 5; $b++) { my $v = rgb2code($r, $g, $b); printf("\033[48;5;%dm %02X,%3d,%s \033[0m\n", $v, $v, $v, $r.$g.$b); } $b = 5; for ($g = 4; $g >= 0; $g--) { my $v = rgb2code($r, $g, $b); printf("\033[48;5;%dm %02X,%3d,%s \033[0m\n", $v, $v, $v, $r.$g.$b); } print "\n"; ########## print "プラス値のみのヒートマップ用の配色案\n"; ########## ($r, $g, $b) = (5, 0, 0); for ($g = 0; $g <= 5; $g++) { my $v = rgb2code($r, $g, $b); printf("\033[48;5;%dm %02X,%3d,%s \033[0m\n", $v, $v, $v, $r.$g.$b); } $g = 5; for ($b = 1; $b <= 4; $b++) { my $v = rgb2code($r, $g, $b); printf("\033[48;5;%dm %02X,%3d,%s \033[0m\n", $v, $v, $v, $r.$g.$b); } print "\n";
参考文献
- エスケープシーケンスを体感する - ザリガニが見ていた...。
- RGBからのエンコードの手順を知る。
- ANSIエスケープコード - コンソール制御 - 碧色工房
- SGR(Select Graphic Rendition)という言葉を知る。
- 24bitカラーは使えないときが多いので、使わないことにした。
- What is the best color range to use for a heat map? - Quora
the "best" color scale is: red-orange-yellow.
- 色相環│色彩学講座