학습목표
1. 색을 표현하는 색상, 명도, 채도 등 세가지 요소를 이해할 수 있다.
2. R에서 색의 이름을 입력하는 방법을 이해하고 사용할 수 있다.
3. R 자체에 내장되어있는 컬러맵과 RColorBrewer, scico 패키지에 내장된 컬러맵을 불러와서 데이터 시각화에 사용할 수 있다. 4. ggplot2를 이용하여 그래프를 작성할 때 사용되는 색상을 스케일 함수를 이용하여 지정할 수 있다.
주요용어
- 색상 : 순수한 색의 종류
- 명도 : 색의 밝기
- 채도 : 순수한 색에 무채색이 섞인 정도
- 컬러맵 : 데이터의 값에 색을 대입할 수 있도록 미리 선정해 놓은 색의 모음
library(scales)
show_col(c("red", "orange", "yellow", "green"))
show_col(c("#FF0000", "#FFFF00", "#00FF00",
"#FF00FF", "#FFFFFF", "#00FFFF",
"#0000FF", "#000000", "#0000FF"))
rgb(1, 0, 0)
show_col(c(rgb(0, 0, 1), rgb(0, 0, 0.5), rgb(0, 0, 0.3), rgb(0, 0, 0)))
show_col(1:9)
colormap (컬러맵)
- 미리 선정해 놓은 색의 모음
- grDevices 패키지에 내장된 컬러맵 함수:
- 원하는 색의 개수 입력하면 색의 모음을 헥스 코드로 출력
- rainbow()
- heat.colors()
- topo.colors()
rainbow(10)
show_col(rainbow(10), ncol=1, cex_label = 0.7, border = NA)
show_col(heat.colors(10), ncol=1, cex_label = 0.7, border = NA)
show_col(topo.colors(10), ncol=1, cex_label = 0.7, border = NA)
RColorBrewer 패키지
- 전문가가 선정한 아름다운 컬러맵의 모음
▶ 순차형(sequential) 컬러맵:
- 채도, 명도가 순차적으로 변하여 크고 작은 느낌
- (한쪽 방향으로만 증가하는) 양적 특성에 적합
▶ 질적(qualitative) 컬러맵:
- 채도와 명도는 비슷, 다양한 색상 → 순서가 없는 느낌
- 순서가 없는 범주형 특성에 적합
▶ 확산형(diverging) 컬러맵:
- 두 가지 다른 색이 양쪽 극단으로 갈 수록 채도가 높아지고 명도가 낮아짐
- (-. +, 양쪽으로 증가하는) 양적 특성에 적합
library(RColorBrewer)
display.brewer.all()
brewer.pal(7, "RdBu")
display.brewer.pal(7, "RdBu")
scico 패키지
- 색맹, 색약이 인식하기 쉽고 흑백 인쇄에도 잘 구분되는 24가지 컬러맵
- 입력: 색의 개수와 컬러맵 이름
- 출력: 헥스 코드
library(scico)
scico_palette_show()
scico(7, palette = "acton")
show_col(scico(7, palette = "acton"))
viridis 컬러맵
- ggplot2 에 내장된 컬러맵
- 색의 차이가 균일하게 인식되고 색맹, 색약도 쉽게 구분
- A, B, C, D, E 옵션이 있음 (디폴트: D)
ggplot2 에서 색 입력
- scale_color_XXXX() : 점이나 선의 색 지정
- scale_fill_XXXX() : 면의 색 지정
- XXXX : 어떤 색을 어떻게 입력할 지에 따라 달라짐
- 범주형 변수를 색으로 나타낼 때
- manual : 색 이름 직접 입력
- brewer : RColorBrewer의 컬러맵
- 연속형 변수를 색으로 나타낼 때
- gradient : 색 이름 직접 입력
- distiller : RColorBrewer의 컬러맵
- viridis : viridis의 컬러맵
- scico : scico의 컬러맵 (별도 설치 및 로드 필요)
- 범주형 변수를 색으로 나타낼 때
setwd("/Users/sm/Desktop/KNOU/visual/R-codes")
load("sah.RData")
library(ggplot2)
ggplot(sah, aes(age, ldl, color=BMI.cat)) + geom_point()
ggplot(sah, aes(age, ldl, color=BMI.cat)) + geom_point() +
scale_color_manual(values=c("underweight"="tomato1", "normal"="tomato2",
"overweight"="tomato3", "obese"="tomato4"))
ggplot(sah, aes(age, ldl, color=BMI.cat)) + geom_point() +
scale_color_manual(values=c("tomato", "orange", "skyblue", "forestgreen"))
ggplot(sah, aes(age, ldl, color=BMI.cat)) + geom_point() +
scale_color_manual(values=c("underweight"="tomato1", "normal"="tomato2",
"overweight"="tomato3", "obese"="tomato4"))
ggplot(sah, aes(age, ldl, color=BMI.cat)) + geom_point() +
scale_color_brewer(palette="Set2")
ggplot(sah, aes(BMI.cat)) + geom_bar()
ggplot(sah, aes(BMI.cat, fill=BMI.cat)) + geom_bar()
ggplot(sah, aes(BMI.cat, fill=BMI.cat)) + geom_bar() +
scale_fill_manual(values=c("tomato", "orange", "skyblue", "forestgreen"))
ggplot(sah, aes(BMI.cat, fill=BMI.cat)) + geom_bar() +
scale_fill_manual(values=c("#66C2A5", "#FC8D62", "#8DA0CB", "#E78AC3"))
ggplot(sah, aes(BMI.cat, fill=BMI.cat)) + geom_bar() +
scale_fill_brewer(palette="Blues")
# 연속형 변수의 값을 표현하는 색 채널 지정하기
e<-ggplot(sah, aes(age, ldl, color=obesity)) + geom_point()
e
e + scale_color_gradient(low="yellow", high="red")
e + scale_color_viridis_c()
e + scale_color_viridis_c(option="A")
e + scale_color_distiller(palette="Purples")
e + scale_color_scico(palette="vik")
범례의 색 디테일 바꾸기
- 범례에서 막대의 위아래 방향 바꾸기
- guides(color=guide_colorbar(reverse=TRUE))
- 범례 막대를 가로로 눕히기
- guides(color=guide_colorbar(direction = "horizontal"))
e + guides(color=guide_colorbar(reverse = TRUE))
e + theme(legend.position = "bottom") +
guides(color=guide_colorbar(direction="horizontal"))
점, 선, 면 전체의 색 지정
- geom 함수 안에 'color= ' 또는 'fill= ' 구문으로 색 지정
- 점이나 선의 색: color=
- 면의 색: fill=
- 반드시 aes() 구문 바깥에
ggplot(sah, aes(age, ldl, color=BMI.cat)) + geom_point(color="dodgerblue3")
# aes 밖에 매핑해야 적용됨
ggplot(sah, aes(BMI.cat)) + geom_bar(fill="dodgerblue3")
ggplot(sah) + geom_bar(aes(BMI.cat), fill="dodgerblue3")
# aes 안에 매핑 시, 색 적용 안됨
ggplot(sah) + geom_bar(aes(BMI.cat, fill="dodgerblue3"))
'개인 공부 기록 > R 시각화' 카테고리의 다른 글
R 시각화 _ 표 데이터의 시각화 (1) _ 산점도 (행렬), (누적) 막대그래프, 히스토그램, 밀도 곡선 (0) | 2025.04.04 |
---|---|
R시각화 _ ggplot2 (2) _ geom_boxplot(), coord, facet, theme 활용 (0) | 2025.04.02 |
R 시각화 _ ggplot2 (1) _ geom_point(), geom_smooth() 활용 (0) | 2025.04.01 |