データの種類に応じて、カンマや単位を付与したり、数値を丸めたいケースがある。D3.jsには、こうした数値の整形に使う関数を返す2つのメソッドが用意されている。
d3.format(specifier)
メソッドとd3.formatPrefix(specifier,value)
メソッドの2つだ。
いきなりややこしいが、これら2つのメソッドはlocale
オブジェクトが保持する同名メソッドのエイリアスである。D3.jsでの数値のフォーマットを理解するには、まずロケールを理解する必要がある。
ロケール
数値のフォーマット(整形)は、ロケールに基づいて行われる。ロケールとは、地域ごとの数値の表現形式である。例えば通貨や小数点、3桁区切りにどの記号を使うか、というようなものだ。
D3.jsでは、以下のようなプロパティを持つオブジェクトによって、ロケールの設定を行う。
各値はデフォルト値である(numerals
のみ、デフォルト値がない)。
ロケールの設定
ロケールの設定は、以下の2つのいずれかを用いて行う。
メソッド名 | 概要 |
---|---|
formatLocale(definition) |
定義に基づいてlocale オブジェクトを返す。 |
formatDefaultLocale(definition) |
定義に基づいてlocale オブジェクトを返す。D3.jsのデフォルトの整形用メソッドを新しいロケールに置き換える。 |
D3.jsのデフォルトの整形メソッドとは、先に触れたd3.format(specifier)
メソッドとd3.formatPrefix(specifier,value)
メソッドの2つである。デフォルトのロケール(US)で事足りる場合は、別途ロケールを作ることなくd3
オブジェクトからこれらのメソッドを呼び出せる。
formatDefaultLocale(definition)
メソッドは、デフォルトの設定を任意に設定したロケールで上書きする。
フォーマット指定子
冒頭に巻き戻ったようだが、D3.jsでは以下の2つのメソッドを使って、数値整形用の関数を作る。
メソッド名 | 概要 |
---|---|
d3.format(specifier) |
渡されたフォーマット指定子(specifier)に基づいて、数値をフォーマットする関数を返す。 |
d3.formatPrefix(specifier,value) |
渡されたフォーマット指定子に基づいて、数値フォーマットし、適切なSI接頭辞を付与する関数を返す。value の扱いが謎かもしれない。value に渡された値を基準にSI接頭辞を定め、それが整形用関数で使われる。SI接頭辞とは、m (ミリ)とかk (キロ)とかM (メガ)とかである。 |
D3.jsのフォーマット指定子(specifier)は、Python3の書式指定ミニ言語仕様(の数値データを対象とする仕様)を参考にしつつ、以下のように定義されている。
整形オプション
fill
は、余白を埋める任意の1文字、align
は、整形オプションである。値は以下のいずれかとなる。
整形オプションの種類 | 概要 |
---|---|
>桁数 |
右詰め。デフォルト値。 |
<桁数 |
左詰め。 |
^桁数 |
中央寄せ。 |
=桁数 |
右詰めと似ているが、符号を埋めた余白の左側に置く |
桁数には、符号と数値も含まれる。以下、サンプルである。
符号オプション
sign
は、符号をどう表示するかを指定するオプションである。以下のいずれかの値を指定できる。
符号オプションの種類 | 概要 |
---|---|
+ |
正負両方とも符号をつける。 |
- |
負の場合のみ符号をつける。 |
( |
負の場合のみ、符号なしで丸括弧で囲う。 |
(半角スペース) |
正の場合は空白、負の場合は負号をつける。 |
マイナスの数値を符号なしで丸括弧で囲うのは、海外の会計の分野でよく見られる慣習だそうである。
記号オプション
記号オプションの種類 | 概要 |
---|---|
$ |
ロケール設定に応じた通過記号を数値につける。 |
# |
#b で2進数、#o で8進数、#x で16進数のプレフィクスをそれぞれ数値につける。 |
D3.jsでは、数値はd3.formatLocale()
メソッド、日付はd3.timeForatLocale()
メソッドを通してロケールの設定を行う。これらのメソッドについては後述する。
ゼロ埋めオプションとカンマ区切りオプション
オプションの種類 | 概要 |
---|---|
0桁数 |
ゼロ埋めする。 |
, |
3桁ごとにカンマで区切る。 |
桁数オプションと表示形式オプション
オプションの種類 | 概要 |
---|---|
.桁数 |
小数点以下の最大桁数を指定する。省略すると6 。 |
f |
固定小数点形式で返す。 |
% |
100倍し、後ろに% をつけて返す。 |
上のテーブルでは1つにまとめてしまったが、桁数オプションの後に表示形式オプションを続ける。例えば小数点以下の桁数が2の場合、以下のようにする。
また、以下の表示形式オプションでは、.桁数
の指定が有効桁数となる。
有効桁数(=significant digits)とは、ゼロ以外の最初に表れる数値から何桁目までを有効とするか、という概念である。例えば有効桁数が1
のとき、1987
という値は2000
に丸められる。また、同様に0.01987
という値は0.02
となる。
その数値の意味を左右する、最も重要な桁数を示すのが有効桁数と言える。
オプションの種類 | 概要 |
---|---|
.桁数 |
有効桁数を指定する。省略すると6 。 |
e |
指数形式で返す。 |
r |
有効桁数までを四捨五入して返す |
g |
有効桁数におさまる数値は固定小数点形式、おさまらない数値は指数形式で返す。 |
s |
有効桁数までを四捨五入して、SI接頭辞(k とかM とか)をつけて返す。 |
p |
100倍し、有効桁数に丸め、% 記号付きの10進数で返す。 |
2,8,10,16進数のそれぞれに変換するよう指定もできる。
オプションの種類 | 概要 |
---|---|
b |
2進数形式で整数に丸めて返す。 |
o |
8進数形式で整数に丸めて返す。 |
d |
10進数形式で整数に丸めて返す。 |
x |
小文字の16進数形式で整数に丸めて返す。 |
X |
大文字の16進数形式で整数に丸めて返す。 |
c |
数値を文字列に変換して返す。 |
すべての表示形式オプションには、末尾の不要なゼロをトリミングする~
オプションも用意されている。
ショートハンド
オプションの種類 | 概要 |
---|---|
(半角スペース) |
~g のショートハンド。デフォルトの有効桁数は6 ではなく12 となる |
n |
,g のショートハンド。 |
このほか、値から妥当な精度を算出するお役立ちメソッドも用意されている。が、まだよく理解できない上に脳みそがパンクしそうなのでおいおいまとめたいと思う。