[R 프로그래밍] 11-1. 데이터 시각화 - plot

Author : tmlab / Date : 2016. 10. 4. 01:04 / Category : Lecture/R 프로그래밍

학습 목표

  • 시각화에 대해 간략하게 알아보고, 간단한 plot들을 그려보도록 합니다.

목차

  1. 고수준 시각화 함수와 저수준 시각화 함수
    • 저수준 시각화 함수
  2. plot
    1. plot 기본 사용법
    2. plot 인수
    3. 기본 값으로 그래프 만들기
      • x,y축 값 모두 지정해서 출력하기
      • x,y축 한계값 지정하기
      • 각 축의 제목과 그래프 제목 지정하기
      • 인수를 사용하여 plot 그리기
      • 화면 분할해서 각 type 확인하기
      • 그래프 중첩하여 그리기
      • 범례 추가하기
  3. barplot
    1. barplot
    2. barplot 인수
    3. 기본 값으로 그래프 만들기
      • 가로로 출력하기
      • 그룹으로 묶어서 출력
        • 누적 막대그래프 그리기
        • 가로로 출력하기
        • 누적 가로 막대 그래프 그리기
    4. 여러 막대 그래프 한번에 그리기
  4. boxplot
    1. boxplot
    2. boxplot 인수
    3. boxplot 생성
      • 다변량 boxplot
      • subset
      • border, col
  5. Histogram
    1. histogram 그리기
    2. 구간 설정하기
  6. Pie Chart
    1. Pie Chart
    2. Pie Chart 인수
    3. Pie Chart 그리기
  7. pairs
    1. pairs
    2. pairs 그리기
  • 과제
  • 출처



1. 고수준 시각화 함수와 저수준 시각화 함수

  • 고수준 시각화 함수란
    • 그래픽 장치 위에 파이차트나 막대 그래프와 같이 독립된 시각화 표현을 하는 함수로, 저수준 그래픽을 적절하게 조합하여 구현
  • 저수준 시각화 함수란
    • 그래픽 장치 위에 점을 찍고 선을 그리고 다각형을 그리는 등의 기능을 하는, 즉 시각화를 구현하기 위해서 R에서 제공하는 기초 함수
  • R 그래프 갤러리
z<-lm(mpg~wt, data=mtcars)  #dist, speed 
#고수준 시각화 함수
plot(mtcars$wt, mtcars$mpg)              
# 저수준 시각화 함수
## 추세선
## Y축 접선
abline(h=20)
abline(h=30)
## x축 접선
abline(v=3, col="blue")
# lty = 선 모양, lwd = 선 굵기, col = 선 색
abline(z, lty=2, lwd=2, col="green") 
abline(z, lty=3, lwd=2, col="red")

저수준 시각화 함수

  • 이미 있는 plot에 다른 요소들을 추가해서 그리는 것
도형함수
points()
직선lines(), segments(), abline()
격자grid()
화살표arrows()
직사각형rect()
문자text(),mtext(),title()
테두리와 축box(),axis()
범례legend()
다각형polygon()

저수준 시각화 함수 설명

함수설명
grid(nx,ny)현재 plot에 x축과 y축을 나누는 격자를 그림
axis(side n,)plot의 축 정보를 더 추가함, 1은 하단 x축, 2는 좌측 y측, 3은 상단 x축, 4는 우측 y축
box(which=,)현재 plot이나 figure 또는 plot 바깥쪽에 추가적인 box를 그림. 여러 graphic parameter 인수를 적용 가능함. which는 “plot”,“figure”,“inner”,“outer”의 인수를 줄 수 있음
legend(x축 위치, y축 위치, 내용,)현재 plot에 범례를 추가. (x,y)의 위치에 범례를 생성
arrow(x,y)화살표를 추가.
lines(x,y)/points(x,y)선, 점들을 추가. points 한정으로 type을 “p”,“b”,“l” 등을 줄 수 있음
abline(a,b) or abline(h= or v=)현재 plot에 선을 추가함. lines와 다른점은 넘겨주는 값이 a=y절편, b=기울기 임. h(horizontal) 값을 주면 x축과 평행하는 선을, v(vertical) 값을 주면 y축과 평행하는 선을 그림
segments(x0,y0,x1,x2)(x0,y0)인 점과 (x1,y1)인 점을 잇는 선을 그림
polygon(x,y)벡터 x와 y로 정의된 폴리곤을 그림
text(x,y,“note”)x,y의 위치에 “note”라는 글을 씀

예제

  • grid(15,3)
    • x축과 y축을 각각 15개, 3개로 등분하는 격자를 그림
  • box(“plot”,col=“red”)
    • plot에 그려진 box에 빨간색 box를 추가로 그림
  • segments(5,2,2,5)
    • 점 (5,2)와 (2,5)을 지나는 선분 그리기
  • arrows(1,1,5,5)
    • 점 (1,1)과 (5,5)을 지나는 화살표 그리기
  • title(“title”,“sub”)
    • 메인 제목(상단)에 “title”을 서브 제목(하단)에 “sub”를 출력
  • text(2,8,“테스트”,srt=45)
    • (2,8) 위치에 “테스트”글자를 45도로 기울여서 출력
plot(1:15)
grid(15,3)
box("plot",col="red")
abline(h=8,col="red")
abline(v=5,col="blue")
rect(1,6,3,8)
segments(5,2,2,5,col="yellow")
arrows(1,1,5,5,col="purple")
text(8,9,"테스트",srt=45)
title("TEST","SUB")
legend(12,5,c("h=8","v=5","segments","arrows"),cex=0.9,col=c("red","blue","yellow","purple"),lty=1)

2. plot

plot 기본 사용법

  • plot(y축 데이터)
  • plot(x축 데이터, y축 데이터, 옵션)

plot 인수

param param1

기본 값으로 그래프 만들기

  • 변수 하나만 줄 경우 y축 값으로 자동으로 사용이 되고, x축으로는 변수의 갯수에 맞춰 index가 주는 것을 확인 할 수 있습니다.


var1<- 1:5
plot(var1)

 

var2<-rep(2,5)
plot(var2)

x,y축 값 모두 지정해서 출력하기


x<-1:5
y<-5:1
plot(x,y)

x,y축 한계값 지정하기

  • xlim과 ylim으로 각 축의 한계값 지정해주기 
x<-1:5
y<-5:1
plot(x,y,xlim=c(1,10),ylim=c(1,5))

각 축의 제목과 그래프 제목 지정하기

  • xlab과 ylab으로 축의 제목을 지정하고, main으로 plot자체의 이름을 지정할 수도 있습니다. 
x<-1:5
y<-5:1
plot(x,y,xlab="X축",ylab="Y축",main="test Plot")

인수를 사용하여 plot 그리기


v1 <- c(100,130,120,160,150)
# line chart 그리기
plot(v1,type="o",col="red",ylim=c(0,200),axes=F,ann=F)
# x축 그리기
axis(1,at=1:5,lab=c("Mon","TUE","WED","WHU","FRI"))
# Y축 그리기
axis(2,ylim=c(0,200))
# title
title(main="FRUIT",col.main="red",font.main=4)
title(xlab="DAY",col.lab="blue")
title(ylab="PRICE",col.lab="green")

화면 분할해서 각 type 확인하기

  • 화면 분할 명령어는 mfrow
  • par(mfrow=c(nrow,ncol))
par(mfrow=c(1,3))
plot(v1,type="o")
plot(v1,type="s")
plot(v1,type="l")

par(mfrow=c(1,1))

그래프 중첩하여 그리기

  • 2가지 방법이 존재함
    1. 겹치고 싶은 plot 사이에 par(new=T) 실행
    2. lines()로 새로운 그래프 추가
  • 단순히 겹쳐서 그리는 것으로 서로 다른 y축의 값이 이상하게 변질된 것을 확인 할 수 있습니다
v1<-1:5
v2<-5:1
v3<-3:7
plot(v1,type="o",col="red")
#그래프 중첩 명령어, default는 F
par(new=T)
plot(v2,type="l",col="blue")
par(new=T) 
plot(v3,type="s",col="yellow")

  • 해결하기 위해선 축의 값을 넉넉히 주거나, lines라는 저수준 함수를 써서 그리면 됩니다
plot(v1,type="o",col="red",ylim=c(0,10))
lines(v2,type="l",col="blue")
lines(v3,type="s",col="yellow")

범례 추가하기

  • 추가 정보를 주는 범례를 추가할 수 있습니다
  • legend(x축 위치, y축 위치, 내용, cex=글자크기, col=색상, pch=크기, lty=선모양)
plot(v1,type="o",col="red",ylim=c(0,10))
lines(v2,type="l",col="blue")
lines(v3,type="s",col="yellow")
legend(4.5,10,c("V1","V2","V3"),cex=0.9,col=c("red","blue","yellow"),lty=1)

3. barplot

barplot 그리기

  • 우리가 흔히 아는 막대그래프입니다
  • 막대그래프는 자료를 조사하여 표로 나타낸 여러 가지 항목들에 대해 수량들의 많고 적음을 비교하기 쉽도록 수량을 막대의 길이로 나타낸 그래프입니다.
  • 히스토그램과 달리 막대는 서로 분리되어 있어서 각각의 수량의 크기를 나타냅니다.
  • 막대그래프는 시각적으로 통계적 사실을 쉽게 파악할 수 있으며, 각 부분의 수량을 쉽게 비교할 수 있고 각각의 항목에 대한 수량의 크기를 정확하게 나타낼 수 있습니다.

barplot 인수

bar

bar

기본 barplot 그리기

x<-1:5
barplot(x)

  • 가로로 출력하기
  • horiz인수 값을 T로 할당하면 됩니다
barplot(x,horiz=T)

그룹으로 묶어서 출력

  • beside인수의 값을 T로 할당하면 됩니다
x<- matrix(5:2,2,2)
x
##      [,1] [,2]
## [1,]    5    3
## [2,]    4    2
barplot(x,beside=T,names=c(5,3),col=c("green","blue"))

  • 누적 막대그래프 그리기
barplot(x,names=c(5,3),col=c("green","blue"),ylim=c(0,12))

  • 가로로 출력하기
x <- matrix(c(5,4,3,2),2,2)
barplot(x,names=c(5,3),beside=T,col=c("green","yellow"),horiz=T)

  • 누적 가로 막대 그래프
x <- matrix(c(5,4,3,2),2,2)
barplot(x,horiz=T, names=c(5,3),col=c("green","yellow"), xlim=c(0,12))

여러 막대 그래프 한번에 그리기

v1 <- c(100,120,140,160,180)
v2 <- c(120,130,150,140,170)
v3 <- c(140,170,120,110,160)

qty <- data.frame(BANANA=v1,CHERRY=v2,ORANGE=v3)
qty
##   BANANA CHERRY ORANGE
## 1    100    120    140
## 2    120    130    170
## 3    140    150    120
## 4    160    140    110
## 5    180    170    160
barplot(as.matrix(qty),main="Fruit's Sales QTY",
        beside=T,col=rainbow(nrow(qty)),ylim=c(0,400))
#범례
legend(14,400,c("MON","TUE","WED","THU","FRI"),cex=0.8,
fill=rainbow(nrow(qty)))

  • 하나의 막대 그래프에 여러가지 내용을 한꺼번에 출력하기
barplot(t(qty),main="Fruits Sales QTY",ylim=c(0,900),
        col=rainbow(length(qty)),space=0.1,cex.axis=0.8,las=1,
        names.arg=c("MON","TUE","WED","THU","FRI"),cex=0.8)
#범례
legend(0.2,800,names(qty),cex=0.7,fill=rainbow(length(qty)) )

  • TIP!
  • t() 함수는 transform 함수로 행과 열을 바꿔줌
qty
##   BANANA CHERRY ORANGE
## 1    100    120    140
## 2    120    130    170
## 3    140    150    120
## 4    160    140    110
## 5    180    170    160
t(qty)
##        [,1] [,2] [,3] [,4] [,5]
## BANANA  100  120  140  160  180
## CHERRY  120  130  150  140  170
## ORANGE  140  170  120  110  160

4. boxplot

  • 정확히 상자와 수염 그림(box and whisker plot)은 두 개 이상의 집단의 상대적 비교를 위해서 각 집단의 최대값(max)과 최소값(min) 그리고 중앙값(자료를 크기순으로 나열했을 때 가운데 위치하는 값: median) 및 사분위수(자료를 크기 순서에 따라 늘어놓은 자료를 4등분 했을 때 위치하는 값을 의미함) 제 1사분위수(아래에서 25% 백분위점에 위치하는 수: Q1), 제 3사분위수(아래에서 75% 백분위점에 위치하는 수: Q3)등 다섯 숫자를 요약하여 그래프로 나타내는 방법으로 John W. Tukey가 제안한 탐색적 데이터 분석 방법입니다.

  • Box plot에서 상자 안의 직선은 중위수를 의미하고 상자의 양쪽 끝은 두 개의 사분위수를 그리고 상자의 양쪽에 이상치를 제외한 최대 및 최소값을 잇는 수염을 직선으로 그려줌으로써 데이터의 전체적 분포 양상을 쉽게 파악할 수 있습니다.

  • 수염의 범위를 벗어난 점들은 이상치(outlier)들을 나타냅니다.

boxplot structure

boxplot structure

boxplot 인수

인수설명예시
formula“~”문자를 사용y축 변수~x축 변수
subsetsubset함수랑 동일
na.action결측값 처리방식(결측값 무시)na.action=NULL
range수염의 길이default = 1.5이며 0으로 지정시 모든 값
varwidth관측치수의 제곱의 크기로 박스그림T or F
notch신뢰구간 표시T or F
outline이상치의 위치를 점으로 표시T or F, default = T
names각 플롯의 이름을 지정, 데이터가 names 속성을 지닐 시 자동 적용
staplewex최대값 최소값 나타내는 선의 폭을 지정default = 0.5
outwex상자 두께에 비례한 이상치를 나타내는 선의 폭 지정default = 0.5
colplot의 내부 색상 지정
log좌표축을 로그 스케일로 변환
horizontal가로로 출력 여부T or F
staplelty최대 최소값 나타내는 선 종류를 지정
outpch이상치 나타내는 점 종류 지정



boxplot 생성

v1<-c(sample(1:10,200,replace=T),20)
v2<-sample(1:20,200,replace=T)
v3<-c(sample(10:20,200,replace=T),-10)
lst <- list(v1,v2,v3)
boxplot(v1)

boxplot(v1,v2)

boxplot(lst)

boxplot(다변량, 식 사용)

  • boxplot을 그리기 위해 식을 제시 하거나 numeric vector만 제공하여야 합니다.
    • 식은 y ~ grp 형식으로, grp는 grouping 변수여야 합니다.(보통 factor형이 사용됩니다)
  • 앞선 방법이 numeric vector만 줬다면 이번엔 식을 사용해서 그림을 그려보도록 하겠습니다.
  • 식으로 그릴 경우, 각 group별로 boxplot이 그려지게 됩니다

  • ToothGrowth는 기니피그의 이빨 길이에 비타민C가 미치는 영향에 대한 데이터 입니다
    • len은 기니피그의 이빨 길이입니다
    • supp는 비타민 C의 투입 방법입니다
      • VC는 아스코브르 산(ascorbic acid), OJ는 오렌지 쥬스(Orange Juice) 입니다.
    • dose는 투여량입니다
      • 각각 0.5, 1, 2mg/day(하루에 0.5,1,2 mg)이 있습니다.
head(ToothGrowth)
##    len supp dose
## 1  4.2   VC  0.5
## 2 11.5   VC  0.5
## 3  7.3   VC  0.5
## 4  5.8   VC  0.5
## 5  6.4   VC  0.5
## 6 10.0   VC  0.5
boxplot(len~dose, data=ToothGrowth)

border, col 사용

x<-1:5
boxplot(x, border="magenta", col=c("lightblue"))

5. Histogram

  • 히스토그램이란 특정데이터의 빈도수를 막대모양으로 표현하는 것을 의미합니다
    • 한글로는 도수분포표라고 합니다
  • 예를 들면, 다음과 같이 10명의 키를 알고 있다고 가정하겠습니다
10인의 키 : 182,175,167,172,163,178,181,166,159,155
  • 단지 저 데이터만 보고 있다면, 단순한 숫자의 나열일 뿐입니다
    • 이를 가공을 해서 보기좋게 그래프로 만들던지 아니면 대표값을 세워서 특징을 말해주는 것이 필요합니다
    • 이를 통계량이라 합니다
  • 히스토그램은 위와 같은 데이터를 정리해서 의미를 보여줄 수 있는 그래프 중 하나입니다
height <- c(182,175,167,172,163,178,181,166,159,155)
hist(height,ylim=c(0,5),labels = T,main="histogram of height")

6. Pie Chart

  • 파이 차트는 각 범주가 데이터에서 차지하는 비율을 나타내는 데 사용할 수 있는 그래프입니다.
  • 파이는 조각으로 나뉘고, 각 조각은 데이터의 범주를 나타냅니다.
  • 조각의 크기를 비교 및 대조하여 각 범주의 상대적인 크기를 평가할 수 있습니다.

Pie Chart 인수

pie chart

pie chart

  • 기본적인 pie chart 그리기
p1 <- c(10,20,30,40)
pie(p1,radius=1)

  • 시작 각도를 90도로 지정하기
pie(p1,radius=1,init.angle=90)

  • 색깔과 label 명을 지정하기
pie(p1,radius=1,init.angle=90,col=rainbow(length(p1)),
    label=c("Week 1" ,"Week 2" , "Week 3" ,"Week 4"))

  • 수치 값을 함께 출력하기
pct <- round(p1/sum(p1) * 100,1)
lab <- paste(pct," %")
pie(p1,radius=1,init.angle=90,col=rainbow(length(p1)),
    label=lab)
legend(1,1.1,c("Week 1","Week 2","Week 3","Week 4"),
       cex=0.5,fill=rainbow(length(p1)))

  • 범례를 생략하고 그래프에 바로 출력하기
pct <- round(p1/sum(p1) * 100,1)
lab1 <- c("Week 1","Week 2","Week 3","Week 4")
lab2 <- paste(lab1,"\n",pct," %")
pie(p1,radius=1,init.angle=90,col=rainbow(length(p1)),label=lab2)

7. pairs 산점도 행렬

  • 각 변수별로 산점도를 그려보는 시각화 방법입니다.

  • iris 데이터로 활용

head(iris)
##   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1          5.1         3.5          1.4         0.2  setosa
## 2          4.9         3.0          1.4         0.2  setosa
## 3          4.7         3.2          1.3         0.2  setosa
## 4          4.6         3.1          1.5         0.2  setosa
## 5          5.0         3.6          1.4         0.2  setosa
## 6          5.4         3.9          1.7         0.4  setosa
pairs(iris[1:4], main="Iris", pch=21, 
      bg=c("red", "green", "blue")[unclass(iris$Species)])

과제 - PR 10

  • mtcars를 이용하여 배운 plot 함수를 종류 별로 한개씩 적용해보세요. 그리고 par() 함수를 이용하여 그래픽 인수를 조정한 후, barchart 그려보시오.

출처

  1. Graphics - 김성근
  2. R라뷰 - 서진수
  3. 컴퓨터야 나랑놀자 블로그 - 1stwook


Archives

05-17 03:44

Contact Us

Address
경기도 수원시 영통구 원천동 산5번지 아주대학교 다산관 429호

E-mail
textminings@gmail.com

Phone
031-219-2910

Tags

Calendar

«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Copyright © All Rights Reserved
Designed by CMSFactory.NET