-
R Graphics - Color 설정Programming/R Programming 2020. 6. 23. 15:56
title: "R Graphics 13-2"
author: "Haeseong Oh"
date: '2020 6 23 '
output: html_document
R Graphics
색상 표현하기
R에서의 색상 표현 방법의 종류
- 색상 상수로 표현하는 방법
- 색상의 이름으로 표현하는 방법
- RGB색상으로 표현하는 방법
RGB 색상
- 빛의 삼원색인 R(Red), G(Green), B(Blue)의 조합으로 정의하는 색상을 의미
- 16진수를 활용하여 0에서 255의 값을 가질 수 있으며, 보통 컴퓨터에서는 16진수를 활용하여 'FF2211'과 같이 나타낸다.
1.색상을 상수로 표현하기
- 1~8 사이의 정수로 정의. 8보다 큰 정수 적용시 recycling 규칙에 의해 반복.
- 1: 검정, 2: 빨강, 3: 녹색, 4: 파란색 5:하늘색 6: 자주색, 7: 노란색, 8: 회색
col.table = function(cols, main=NULL, fg=NULL){ n = length(cols) plot(seq(n), rep(1, n), xlim = c(0,n), ylim = c(0,1), type = 'n', xlab = "", ylab = "", axes = F) if(is.null(main)) { main = paste('Color Table by', deparse(substitute(cols))) } title(main=main) if(is.null(fg)) { fg = unlist(lapply(cols, function(x) ifelse(mean(col2rgb(x)) > 127 | toupper(x) %in% c ("WHITE", "#FFFFFF"), "black", "white"))) }else{ fg = rep(fg, n) for(i in 1:n) { polygon(c(i-1, i-1, i, i), c(0.05, 1, 1, 0.05), col=cols[i]) text(mean(c(i-1, i)), 0.52, labels = cols[i], srt=90, adj=0.5, col=fg[i], cex=1.2) } } } par(mfrow=c(2,1)) col.table(1:16) col.table(5:20)
2.색상 이름으로 표현하기
- 모든 색상에 이름을 부여하기에는 한계가 존재
- RGB 색상 = 256256256=16,777,216의 색상으로 표현
- R에서는 657개의 색상에 대한 이름 제공
- colors()
- 색상의 이름만으로는 어떠한 색인지 알 수 없는 경우
- colors()와 col2rgb() 함수를 사용하여 내용 확인 가능
cols = colors() length(cols) cols[1:5] grep("sky", cols, value=TRUE) col2rgb(grep('sky', cols, value=TRUE)) par(mfrow=c(2,1), mar=c(1,1,3,1)) col.table(grep('sky', cols, value=TRUE)) col.table(grep('red', cols, value=TRUE))
col.map = function(cols=colors()) { n <- length(cols) cnt <- floor(sqrt(n)) plot.new() plot.window(xlim=c(0, cnt), ylim=c(0,cnt)) for (i in 1:cnt) for (j in 1:cnt) rect(i-1, j-1, i, j, col=cols[(i-1)*cnt+ j], border=NA) } col.map(colors())
3.색상을 RGB로 표현하기
- R에서의 RGB형식
- #RGB의 형태의 문자열로 나타낸다
- 각 RGB는 2개의 16진수로 표기: #RRGGGB
- col2rgb() 함수
- 주어진 수 or 색상 이름을 RGB 표현으로 바꾸어주는 함수
- RGB 표현 시 유용한 함수
- as.character.hexmode(number) #16진수 변환
- toupper(char) #대문자로 변환
- rev(vector) #벡터의 순서를 반대로 정리
RGB 색상으로 표현하는 방법 예제
seqs = seq(0,255,length=15) seqs hexs = toupper(as.character.hexmode(seqs)) hexs red = paste('#', hexs, "0000", sep = "") green = paste("#00", hexs, "00", sep="") blue = paste("#0000", hexs, sep = "") mix1 = paste("#", hexs, hexs, hexs, sep="") mix2 = paste("#", rev(hexs), hexs, rev(hexs), sep="") par(mfrow=c(5,1), mar=c(1,1,3,1)) col.table(red) col.table(green) col.table(blue) col.table(mix1) col.table(mix2)
색상 팔레트
- 색상 팔레트(color palettes)
- 일정 간격으로 색상을 나타내어 미리 정해두고 사용하는 색상 벡터를 나타낸다.
- R에서는 몇 가지 색상 팔레트를 제공
- rainbow() : 무지개 색상의 팔레트
- heat.colors() : 따뜻한 색감의 색상 팔레트
- terrain.colors() : 지형을 나타내는 색감의 색상 팔레트
- topo.colors() : 지형을 나타내는 색감의 색상 팔레트
- cm.colors() : cyan에서 magenta로 진행되는 색상 팔레트
- gray() : 회색 계열로 구성된 색상 팔레트.(0:블랙, 1:화이트 계열)
par(mfrow = c(6,1), mar=c(0,0,2,0)) col.table(rainbow(20)) col.table(heat.colors(20)) col.table(terrain.colors(20)) col.table(topo.colors(20)) col.table(cm.colors(20)) col.table(gray(seq(0,255,length=20)/255)) par(mfrow=c(2,2), mar=c(0,0,2,0)) col.map(rainbow(400, start = 0, end = 0.8)) col.map(heat.colors(400)) col.map(cm.colors(400)) col.map(topo.colors(400))
알파 채널
- 알파 투명 채널 (alpha transparency channel)
- 색상의 투명도를 지정하는 값
- 표현 형식: RGB 형식의 뒤에 두 자리의 16진수로 투명도 표시
- #RRGGBBAA : R,G, B, A의 값
- AA = 00 이면 투명 (색상이 나타나지 않는다)
- AA = FF 이면 불투명 (알파 채널 생략 시 동일한 결과)
- 여러 그래프가 중첩되어 구조를 파악하기 어려운 경우, 투명도를 활용하여 구조를 용이하게 파악할 수 있다.
seqs = seq(0, 255, length = 20) alpha = toupper(as.character.hexmode(seqs)) par(mfrow = c(5,1), mar = c(0,0,2,0)) col.table(paste("#FF0000", alpha, sep=""), fg =1) col.table(paste("#00FF00", alpha, sep=""), fg =1) col.table(paste("#0000FF", alpha, sep=""), fg =1) col.table(rainbow(20), main = "Alpha Channel 사용 안 함") col.table(rainbow(20, alpha = seq(0, 1, length=20)), main = "Alpha Channel 사용", fg=1)
x = c(1, 1.3, 1.6) y = c(1,2,1) par(mar=c(4,2,3,1), mfrow = c(1,2)) plot(x, y, pch = 16, cex = 20, col = c('red', 'green', 'blue'), xlim = c(0,3), ylim = c(-2, 5)) title(main = "col=c('red', 'green', 'blue')") plot(x, y, pach = 16, cex= 20, col=c("#FF000077", "#00FF0077", "#0000FF77"), xlim = c(0,3), ylim = c(-2,5)) title(main = "alpha channel by \"77\77")
- hsv() 함수
- 색의 세 가지 속성인 색상, 채도, 명도를 사용하여 색상을 지정
- 함수의 인수: h,s,v,alpha(투명도)
- 함수의 인수의 값은 각각 0 - 1 사이의 값
- 함수의 반환 값: 'RRGGBBAA'의 형태
- rgb() 함수
- red green, blue, alpha의 값을 인수로 하여 색상값을 반환
- 함수의 인수값은 기본 설정으로 (0-255)/255의 값으로 표현
- 함수의 반환 값 : 'RRGGBBAA'의 형태
#왼쪽 아래부터위로 1,2,3,4 순서임. par(mfrow = c(2,2)) par(mar=c(0.1, 0.1, 1, 0.1)) hsv(0.5, 0.5, 0.5) hsv1 = c(hsv(0.5, 0.5, 0.5), hsv(0.6, 0.5, 0.5), hsv(0.7, 0.5, 0.5), hsv(0.8, 0.5, 0.5)) hsv2 = c(hsv(0.5, 0.5, 0.5), hsv(0.5, 0.6, 0.5), hsv(0.5, 0.7, 0.5), hsv(0.5, 0.8, 0.5)) col.map(hsv1) title('hsv1') col.map(hsv2) title("hsv2")
reds1 = rgb((0:15)/15, g=0, b=0) reds2 = rgb((0:15)/15, g=0, b=0, alpha = 0.5) gray1 = gray(0:8/8) gray2 = gray(0:8/8, alpha = 0.5) par(mfrow = c(2,2), mar = c(1,3,1,1)) col.map(reds1) title('red1') col.map(reds2) title('reds2') col.map(gray1) title('gray1') col.map(gray2) title('gray2')
PNG BMP PDF 형식
- png, jpeg, bmp, pdf 형식 파일 선언하기 (Open Device)
- png(filename='d:test.png')
- bmp(filename='d:test.bmp')
- pdf(file='d:test.pdf') #여러 plot을 동시 출력 가능
- plot 실행 (Draw Picture)
- a = 1:10
- b = 2*x + rnorm(10)
- plot(a,b)
- Device Off (Close Device)
- dev.off()
Device copy를 이용한 내보내기
- (1) plot 실행
- a = 1:10
- b = 2*x + rnorm(10)
- plot(a,b)
- (2) Device COPY
- dev.copy(jpeg,filename='d:/test.jpg')
- (3) Device OFF
- dev.off()
- (1) plot 실행
'Programming > R Programming' 카테고리의 다른 글
Data Visualization using R (R을 이용한 데이터 시각화) (0) 2020.06.23 R 텍스트 마이닝 라이브러리 KoNLP 패키지 설치 (0) 2020.06.21 R foreign 패키지 설치하기. (0) 2020.06.21