【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.
- 色相環│色彩学講座
