0. Intro
색상은 시각화에서 가장 중요한 역할을 한다고 해도 과언이 아닙니다. 그래프의 색상에 따라 전달하고자 하는 의미, 전달되는 방법이 크게 달라질 수 있습니다.
이번 글에서는 R에서 데이터 시각화를 위해 색상을 고르는 방법에 대해 살펴보겠습니다.
1. colors()
R에는 기본적으로 내장된 색상 이름이 657가지나 됩니다. 어떤 종류의 색상이 있는지 살펴보기 위해서는 colors()
를 실행해보면 됩니다.
[1] "white" "aliceblue" "antiquewhite"
[4] "antiquewhite1" "antiquewhite2" "antiquewhite3"
[7] "antiquewhite4" "aquamarine" "aquamarine1"
[10] "aquamarine2" "aquamarine3" "aquamarine4"
[13] "azure" "azure1" "azure2"
[16] "azure3" "azure4" "beige"
[19] "bisque" "bisque1" "bisque2"
[22] "bisque3" "bisque4" "black"
[25] "blanchedalmond" "blue" "blue1"
[28] "blue2" "blue3" "blue4"
[31] "blueviolet" "brown" "brown1"
[34] "brown2" "brown3" "brown4"
[37] "burlywood" "burlywood1" "burlywood2"
[40] "burlywood3" "burlywood4" "cadetblue"
[43] "cadetblue1" "cadetblue2" "cadetblue3"
[46] "cadetblue4" "chartreuse" "chartreuse1"
[49] "chartreuse2" "chartreuse3" "chartreuse4"
[52] "chocolate" "chocolate1" "chocolate2"
[55] "chocolate3" "chocolate4" "coral"
[58] "coral1" "coral2" "coral3"
[61] "coral4" "cornflowerblue" "cornsilk"
[64] "cornsilk1" "cornsilk2" "cornsilk3"
[67] "cornsilk4" "cyan" "cyan1"
[70] "cyan2" "cyan3" "cyan4"
[73] "darkblue" "darkcyan" "darkgoldenrod"
[76] "darkgoldenrod1" "darkgoldenrod2" "darkgoldenrod3"
[79] "darkgoldenrod4" "darkgray" "darkgreen"
[82] "darkgrey" "darkkhaki" "darkmagenta"
[85] "darkolivegreen" "darkolivegreen1" "darkolivegreen2"
[88] "darkolivegreen3" "darkolivegreen4" "darkorange"
[91] "darkorange1" "darkorange2" "darkorange3"
[94] "darkorange4" "darkorchid" "darkorchid1"
[97] "darkorchid2" "darkorchid3" "darkorchid4"
[100] "darkred" "darksalmon" "darkseagreen"
[103] "darkseagreen1" "darkseagreen2" "darkseagreen3"
[106] "darkseagreen4" "darkslateblue" "darkslategray"
[109] "darkslategray1" "darkslategray2" "darkslategray3"
[112] "darkslategray4" "darkslategrey" "darkturquoise"
[115] "darkviolet" "deeppink" "deeppink1"
[118] "deeppink2" "deeppink3" "deeppink4"
[121] "deepskyblue" "deepskyblue1" "deepskyblue2"
[124] "deepskyblue3" "deepskyblue4" "dimgray"
[127] "dimgrey" "dodgerblue" "dodgerblue1"
[130] "dodgerblue2" "dodgerblue3" "dodgerblue4"
[133] "firebrick" "firebrick1" "firebrick2"
[136] "firebrick3" "firebrick4" "floralwhite"
[139] "forestgreen" "gainsboro" "ghostwhite"
[142] "gold" "gold1" "gold2"
[145] "gold3" "gold4" "goldenrod"
[148] "goldenrod1" "goldenrod2" "goldenrod3"
[151] "goldenrod4" "gray" "gray0"
[154] "gray1" "gray2" "gray3"
[157] "gray4" "gray5" "gray6"
[160] "gray7" "gray8" "gray9"
[163] "gray10" "gray11" "gray12"
[166] "gray13" "gray14" "gray15"
[169] "gray16" "gray17" "gray18"
[172] "gray19" "gray20" "gray21"
[175] "gray22" "gray23" "gray24"
[178] "gray25" "gray26" "gray27"
[181] "gray28" "gray29" "gray30"
[184] "gray31" "gray32" "gray33"
[187] "gray34" "gray35" "gray36"
[190] "gray37" "gray38" "gray39"
[193] "gray40" "gray41" "gray42"
[196] "gray43" "gray44" "gray45"
[199] "gray46" "gray47" "gray48"
[202] "gray49" "gray50" "gray51"
[205] "gray52" "gray53" "gray54"
[208] "gray55" "gray56" "gray57"
[211] "gray58" "gray59" "gray60"
[214] "gray61" "gray62" "gray63"
[217] "gray64" "gray65" "gray66"
[220] "gray67" "gray68" "gray69"
[223] "gray70" "gray71" "gray72"
[226] "gray73" "gray74" "gray75"
[229] "gray76" "gray77" "gray78"
[232] "gray79" "gray80" "gray81"
[235] "gray82" "gray83" "gray84"
[238] "gray85" "gray86" "gray87"
[241] "gray88" "gray89" "gray90"
[244] "gray91" "gray92" "gray93"
[247] "gray94" "gray95" "gray96"
[250] "gray97" "gray98" "gray99"
[253] "gray100" "green" "green1"
[256] "green2" "green3" "green4"
[259] "greenyellow" "grey" "grey0"
[262] "grey1" "grey2" "grey3"
[265] "grey4" "grey5" "grey6"
[268] "grey7" "grey8" "grey9"
[271] "grey10" "grey11" "grey12"
[274] "grey13" "grey14" "grey15"
[277] "grey16" "grey17" "grey18"
[280] "grey19" "grey20" "grey21"
[283] "grey22" "grey23" "grey24"
[286] "grey25" "grey26" "grey27"
[289] "grey28" "grey29" "grey30"
[292] "grey31" "grey32" "grey33"
[295] "grey34" "grey35" "grey36"
[298] "grey37" "grey38" "grey39"
[301] "grey40" "grey41" "grey42"
[304] "grey43" "grey44" "grey45"
[307] "grey46" "grey47" "grey48"
[310] "grey49" "grey50" "grey51"
[313] "grey52" "grey53" "grey54"
[316] "grey55" "grey56" "grey57"
[319] "grey58" "grey59" "grey60"
[322] "grey61" "grey62" "grey63"
[325] "grey64" "grey65" "grey66"
[328] "grey67" "grey68" "grey69"
[331] "grey70" "grey71" "grey72"
[334] "grey73" "grey74" "grey75"
[337] "grey76" "grey77" "grey78"
[340] "grey79" "grey80" "grey81"
[343] "grey82" "grey83" "grey84"
[346] "grey85" "grey86" "grey87"
[349] "grey88" "grey89" "grey90"
[352] "grey91" "grey92" "grey93"
[355] "grey94" "grey95" "grey96"
[358] "grey97" "grey98" "grey99"
[361] "grey100" "honeydew" "honeydew1"
[364] "honeydew2" "honeydew3" "honeydew4"
[367] "hotpink" "hotpink1" "hotpink2"
[370] "hotpink3" "hotpink4" "indianred"
[373] "indianred1" "indianred2" "indianred3"
[376] "indianred4" "ivory" "ivory1"
[379] "ivory2" "ivory3" "ivory4"
[382] "khaki" "khaki1" "khaki2"
[385] "khaki3" "khaki4" "lavender"
[388] "lavenderblush" "lavenderblush1" "lavenderblush2"
[391] "lavenderblush3" "lavenderblush4" "lawngreen"
[394] "lemonchiffon" "lemonchiffon1" "lemonchiffon2"
[397] "lemonchiffon3" "lemonchiffon4" "lightblue"
[400] "lightblue1" "lightblue2" "lightblue3"
[403] "lightblue4" "lightcoral" "lightcyan"
[406] "lightcyan1" "lightcyan2" "lightcyan3"
[409] "lightcyan4" "lightgoldenrod" "lightgoldenrod1"
[412] "lightgoldenrod2" "lightgoldenrod3" "lightgoldenrod4"
[415] "lightgoldenrodyellow" "lightgray" "lightgreen"
[418] "lightgrey" "lightpink" "lightpink1"
[421] "lightpink2" "lightpink3" "lightpink4"
[424] "lightsalmon" "lightsalmon1" "lightsalmon2"
[427] "lightsalmon3" "lightsalmon4" "lightseagreen"
[430] "lightskyblue" "lightskyblue1" "lightskyblue2"
[433] "lightskyblue3" "lightskyblue4" "lightslateblue"
[436] "lightslategray" "lightslategrey" "lightsteelblue"
[439] "lightsteelblue1" "lightsteelblue2" "lightsteelblue3"
[442] "lightsteelblue4" "lightyellow" "lightyellow1"
[445] "lightyellow2" "lightyellow3" "lightyellow4"
[448] "limegreen" "linen" "magenta"
[451] "magenta1" "magenta2" "magenta3"
[454] "magenta4" "maroon" "maroon1"
[457] "maroon2" "maroon3" "maroon4"
[460] "mediumaquamarine" "mediumblue" "mediumorchid"
[463] "mediumorchid1" "mediumorchid2" "mediumorchid3"
[466] "mediumorchid4" "mediumpurple" "mediumpurple1"
[469] "mediumpurple2" "mediumpurple3" "mediumpurple4"
[472] "mediumseagreen" "mediumslateblue" "mediumspringgreen"
[475] "mediumturquoise" "mediumvioletred" "midnightblue"
[478] "mintcream" "mistyrose" "mistyrose1"
[481] "mistyrose2" "mistyrose3" "mistyrose4"
[484] "moccasin" "navajowhite" "navajowhite1"
[487] "navajowhite2" "navajowhite3" "navajowhite4"
[490] "navy" "navyblue" "oldlace"
[493] "olivedrab" "olivedrab1" "olivedrab2"
[496] "olivedrab3" "olivedrab4" "orange"
[499] "orange1" "orange2" "orange3"
[502] "orange4" "orangered" "orangered1"
[505] "orangered2" "orangered3" "orangered4"
[508] "orchid" "orchid1" "orchid2"
[511] "orchid3" "orchid4" "palegoldenrod"
[514] "palegreen" "palegreen1" "palegreen2"
[517] "palegreen3" "palegreen4" "paleturquoise"
[520] "paleturquoise1" "paleturquoise2" "paleturquoise3"
[523] "paleturquoise4" "palevioletred" "palevioletred1"
[526] "palevioletred2" "palevioletred3" "palevioletred4"
[529] "papayawhip" "peachpuff" "peachpuff1"
[532] "peachpuff2" "peachpuff3" "peachpuff4"
[535] "peru" "pink" "pink1"
[538] "pink2" "pink3" "pink4"
[541] "plum" "plum1" "plum2"
[544] "plum3" "plum4" "powderblue"
[547] "purple" "purple1" "purple2"
[550] "purple3" "purple4" "red"
[553] "red1" "red2" "red3"
[556] "red4" "rosybrown" "rosybrown1"
[559] "rosybrown2" "rosybrown3" "rosybrown4"
[562] "royalblue" "royalblue1" "royalblue2"
[565] "royalblue3" "royalblue4" "saddlebrown"
[568] "salmon" "salmon1" "salmon2"
[571] "salmon3" "salmon4" "sandybrown"
[574] "seagreen" "seagreen1" "seagreen2"
[577] "seagreen3" "seagreen4" "seashell"
[580] "seashell1" "seashell2" "seashell3"
[583] "seashell4" "sienna" "sienna1"
[586] "sienna2" "sienna3" "sienna4"
[589] "skyblue" "skyblue1" "skyblue2"
[592] "skyblue3" "skyblue4" "slateblue"
[595] "slateblue1" "slateblue2" "slateblue3"
[598] "slateblue4" "slategray" "slategray1"
[601] "slategray2" "slategray3" "slategray4"
[604] "slategrey" "snow" "snow1"
[607] "snow2" "snow3" "snow4"
[610] "springgreen" "springgreen1" "springgreen2"
[613] "springgreen3" "springgreen4" "steelblue"
[616] "steelblue1" "steelblue2" "steelblue3"
[619] "steelblue4" "tan" "tan1"
[622] "tan2" "tan3" "tan4"
[625] "thistle" "thistle1" "thistle2"
[628] "thistle3" "thistle4" "tomato"
[631] "tomato1" "tomato2" "tomato3"
[634] "tomato4" "turquoise" "turquoise1"
[637] "turquoise2" "turquoise3" "turquoise4"
[640] "violet" "violetred" "violetred1"
[643] "violetred2" "violetred3" "violetred4"
[646] "wheat" "wheat1" "wheat2"
[649] "wheat3" "wheat4" "whitesmoke"
[652] "yellow" "yellow1" "yellow2"
[655] "yellow3" "yellow4" "yellowgreen"
657가지의 색상 중 원하는 색의 이름으로 그 색을 사용할 수 있습니다.
우선 R에서 가장 많이 활용되는 시각화 패키지 ggplot2
에 있는 diamonds
데이터로 예시를 들어보겠습니다.
library (ggplot2)
ggplot (diamonds,
aes (x= cut))+
geom_bar (fill= colors ()[1 : 5 ])
[1] "white" "aliceblue" "antiquewhite" "antiquewhite1"
[5] "antiquewhite2"
colors()
의 1~5번째 값을 확인해보니, white, aliceblue, antiquewhite 등이었습니다. 이 색상들을 활용하여 각각의 막대 그래프 색을 지정해줬습니다.
물론 하나의 색상만으로 막대그래프의 색상을 동일하게 지정해줄 수도 있습니다.
library (ggplot2)
ggplot (diamonds,
aes (x= cut))+
geom_bar (fill= colors ()[657 ])
각각의 색상들은 모두 자신만의 16자리의 값을 갖고 있습니다. 이 16자리 형태의 값들은 HEX color라고 불리며, 웹페이지에서 색상을 나타내기 위한 규격입니다.
예시로는 #FFFFFF
를 들 수 있겠습니다. HEX color는 맨 앞에 #이 오고, 숫자나 문자 6자리가 오게됩니다. 첫 두 자리는 적색 계열을, 다음 두 글자는 녹색, 마지막 두 글자는 청색 계열을 나타냅니다. 각각의 색상은 모두 00부터 FF까지의 값을 갖습니다.
이처럼 각각의 색상별로 고유한 HEX 코드가 존재하지만, 우리에게는 색상의 이름으로 선택하는 것이 훨씬 쉽기 때문에, colors()
를 이용해서 원하는 색상을 선택하여 시각화를 할 수 있습니다.
ggplot (diamonds, aes (x= color)) +
geom_bar (fill= c ('red' ,'orange' ,'yellow' ,'green' ,'blue' ,'navy' , 'purple' ))
2. RColorBrewer()
앞서 colors()
를 이용해서는 표현하고자 하는 범주만큼 색상을 일일일 입력해줘야 했습니다.
이러한 방법은 원하는 색상을 직접 선택할 수 있다는 장점이 있으나, 아무래도 번거롭다는 단점이 있습니다.
그래서 R에서 저장된 색상모음들을 이용하는 것을 통해 번거로움을 해소할 수 있습니다. 바로 RColorBrewer()
라는 패키지를 이용하는 방법입니다.
# 패키지 설치
install.packages ('RColorBrewer' )
Installing RColorBrewer [1.1-3] ...
OK [linked cache in 0.3 milliseconds]
* Installed 1 package in 2.3 seconds.
# 패키지 불러오기
library (RColorBrewer)
패키지를 잘 불러왔다면, display.brewer.all()
을 이용해 사용 가능한 모든 색상 팔레트를 확인할 수 있습니다.
팔레트에는 크게 세 종류가 있습니다.
연속형 팔레트(Sequential palettes): 위 사진에서 첫 번째 그룹에 해당하는 팔레트입니다. 특정 색상이 점점 진해지는 특징을 갖고 있습니다. 순서대로 나열된 데이터를 시각화하기에 적합합니다.
정성 팔레트(Qualitative palettes): 위 사진에서 두 번째 그룹에 해당하는 팔레트입니다. 클래스 간의 크기 차이를 의미하지 않으며, 색상은 클래스 간의 주요 시각적 차이를 만드는 데 사용됩니다. 질적 체계는 명목 또는 범주형 데이터를 표현하는 데 가장 적합합니다.
다범주 팔레트(Diverging palettes): 위 사진에서 세 번째 그룹에 해당하는 팔레트입니다. 데이터가 갖는 범위의 양 끝~ 중간 범위의 값과 끝값을 똑같이 강조할 수 있습니다. 양 끝으로 갈수록 색이 진해지고, 중간으로 갈수록 색이 연해지므로, 양 끝의 값을 강조하는 데 사용할 수 있습니다.
ggplot
을 이용할 때 팔레트를 이용하기 위해서는 scale_fill_brewer()
또는 scale_color_brewer()
를 이용해야 합니다.
ggplot (diamonds, aes (x= cut, fill= color)) +
geom_bar () +
scale_fill_brewer (palette = 'Spectral' ,direction = - 1 )
diamonds에서 color
변수는 범주별 등급을 나타냅니다. 양 극단의 color
을 강조시키기 위해 때문에, 다범주 팔레트중 하나인 Spectral을 사용하였습니다.
3. 패키지 내장 팔레트
다른 팔레트를 이용하는 방법은 ggplot과 함께 사용할 수 있는 다른 패키지들을 이용하는 것입니다.
library (ggthemes)
library (ggsci)
대표적으로는 ggthemes
, ggsci
와 같은 패키지가 있습니다. scale_fill_
또는 scale_color_
로 시작하는 함수를 이용해 다양한 팔레트를 선택할 수 있습니다.
ggplot (diamonds, aes (x= price, y= carat, color= cut)) +
geom_point () +
ggthemes:: scale_color_pander ()
이 때 각 팔레트마다 가능한 범주의 수가 정해져 있으니, 잘 확인해보고 사용하는 것이 필요합니다.
Back to top