色の話・その4
以前の日記で少し前フリしていた色の話。の続き。
- 色は視認性が高いグラフを書くときに大切な要素
- 色の多用は、グラフの本質を隠してしまう
- 人が理解できる限界は3~4色じゃないだろうか
と、思ってます。
ここでは、Rを起動すると自動的に読み込まれるgrDevicesパッケージの話。
Rには色のパラメータを指定して着色する3つの関数、RGB関数、hsv関数、そしてhsl関数があります。
それぞれ、パラメータの指定方法が違うのですが、自分のフィールドにあった指定方法があるのでしょうか?
ちなみに、RGB色空間、HSV色空間とHSL色空間の説明はこんな感じでした。
色はよく、色空間という観点で考えられます。最も一般的に使用される色空間は、RGB (赤、緑、青)、HSL (色相、彩度、輝度)、および HSV (色相、彩度、値) です。
RGB の色空間は、立方体として視覚化できます。
ディスプレイには RGB が採用されているため、開発者はよく色を RGB で考えますが、RGB の色空間は人間の知覚には対応しません。たとえば、濃いシアンに赤を追加した場合、知覚的には赤みが強くなるわけではなく、シアンが薄くなったと感じられます。HSL と HSV の色空間は、色相、彩度、輝度または明度の 3 つの要素で構成されています。この 2 つの色空間はより人間の知覚に近いので、RGB の代わりによく使用されます。
HSL の色空間は、双円すいで示され、最上部が白、最下部が黒、中央部が中間色になります。
HSV の色空間も、単一の円すいであるという点を除いて HSL と同様です。
だそうな。
私はデザイナーではないので、細かいところは良く分かりません。
- hsv関数
色相(hue)、彩度(chroma)、輝度(luminance)を指定して色を作る関数。
alphaは透過性を指定する。
下のHSL関数とよく似ていますが、上の説明の通り、認識する色空間の形状が違うということ。色空間は単一の円すい空間になる(そうだ)。
> dat <- matrix(rep(1,14)) > (x <- hsv(h=seq(0,1,length.out=14),s=1,v=1)) [1] "#FF0000" "#FF7600" "#FFEB00" "#9DFF00" "#27FF00" "#00FF4E" "#00FFC4" [8] "#00C4FF" "#004EFF" "#2700FF" "#9D00FF" "#FF00EB" "#FF0076" "#FF0000" > (y <- hsv(h=.5,s=1,v=seq(0,1,length.out=14))) [1] "#000000" "#001414" "#002727" "#003B3B" "#004E4E" "#006262" "#007676" [8] "#008989" "#009D9D" "#00B1B1" "#00C4C4" "#00D8D8" "#00EBEB" "#00FFFF" > > jpeg("hsvcolorspace.jpg") > layout(1:2) > par(mai=c(.8,.1,.4,.4)) > barplot(dat,horiz=TRUE,col=x,xaxt="n",main="hsv(h=seq(0,1,length.out=14),s=1,v=1)") > gridtext(label=x,at=cumsum(dat)-.5,rot=-60) > > barplot(dat,horiz=TRUE,col=y,xaxt="n",main="hsv(h=.5,s=1,v=seq(0,1,length.out=14)))") > gridtext(label=y,at=cumsum(dat)-.5,rot=-60) > dev.off()
- hcl関数
色相(hue)、彩度(saturation)、明度(value)を指定して色を作る関数。
おなじく、alphaは透過性を指定する。
上のHSV色空間とよく似ていますが、上の説明の通り、認識する色空間の形状が違うということ。色空間は双円すい空間になる(そうで)、純色の輝度が 50% になる。
> dat <- matrix(rep(1,14)) > (x <- hcl(h=seq(0,360,length.out=14),c=50,l=50)) [1] "#AD6071" "#A56851" "#957132" "#7E7A20" "#5E8131" "#2E8750" "#00896F" [8] "#00888A" "#00839F" "#5479AB" "#816CAC" "#9D62A1" "#AB5D8C" "#AD6071" > (y <- hcl(h=120,c=100,l=seq(0,100,length.out=14))) [1] "#000000" "#002600" "#003700" "#004900" "#005C00" "#006F00" "#008200" [8] "#209600" "#3EAB00" "#57C000" "#6ED62B" "#85EC50" "#9BFF6C" "#B2FF86" > > jpeg("hclcolorspace.jpg") > layout(1:2) > par(mai=c(.8,.1,.4,.4)) > barplot(dat,horiz=TRUE,col=x,xaxt="n",main="hcl(h=seq(0,360,length.out=14),c=50,l=50)") > gridtext(label=x,at=cumsum(dat)-.5,rot=-60) > > barplot(dat,horiz=TRUE,col=y,xaxt="n",main="hcl(h=120,c=100,l=seq(0,100,length.out=14)") > gridtext(label=y,at=cumsum(dat)-.5,rot=-60) > dev.off()
- rgb関数
赤(red)、緑(green)、青(blue)を指定して色を作る関数。
おなじく、alphaは透過性を指定する。
それぞれの色の階調は0からmaxColorValueで指定する。
階調指定が面倒な場合はnamesで指定してもいい。
> dat <- matrix(rep(1,14)) > (x <- rgb(r=seq(0,1,length.out=14),g=1,b=0)) [1] "#00FF00" "#14FF00" "#27FF00" "#3BFF00" "#4EFF00" "#62FF00" "#76FF00" [8] "#89FF00" "#9DFF00" "#B1FF00" "#C4FF00" "#D8FF00" "#EBFF00" "#FFFF00" > (y <- rgb(r=0,g=.5,b=seq(0,1,length.out=14))) [1] "#008000" "#008014" "#008027" "#00803B" "#00804E" "#008062" "#008076" [8] "#008089" "#00809D" "#0080B1" "#0080C4" "#0080D8" "#0080EB" "#0080FF" > > jpeg("rgbcolorspace.jpg") > layout(1:2) > par(mai=c(.8,.1,.4,.4)) > barplot(dat,horiz=TRUE,col=x,xaxt="n",main="rgb(r=seq(0,1,length.out=14),g=1,b=0)") > gridtext(label=x,at=cumsum(dat)-.5,rot=-60) > > barplot(dat,horiz=TRUE,col=y,xaxt="n",main="rgb(r=0,g=.5,b=seq(0,1,length.out=14)") > gridtext(label=y,at=cumsum(dat)-.5,rot=-60) > dev.off()
僕の場合は、rgb関数が一番理解しやすい。