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