본문 바로가기

데이터 분석

R 데이터 분석 - 데이터 시각화

13 -1 


 
 
 


 
 

그래프

 
r에서 기본으로 제공하는 plot() 함수와 ggplot2 패키지를 이용하는 방법이 있다.
 
 
 
 
 
plot(x, y, 옵션)
 
산점도를 그릴 때 사용하는 함수
산점도) 주어진 데이터를 점으로 표시해서, 흩어뿌리듯 시각화한 차트 
데이터 분포를 한눈에 볼 수 있다
 
 
x : x축 데이터
y : y축 데이터
옵션 : main = 그래프 제목, sub = 그래프 부제목, xlab = x축제목, ylab = y축제목, type = plot의 형태
 
axes = plot의 테두리선
col = plot의 색상 
 
 
 

 
 


 
 
 
 
 
 
 
그래프 기본 - 1
 

age <- c(24,36,40,42,27,35,55,48)
plot(age, main = "나이분포", ylab = "나이")
plot.new()
# 화면 깨끗해짐


데이터가 하나밖에 없을 때는 y 값으로 인식
텍스트는 더블 쿼티션 ""
 
 
 
 

age <- c(24,36,40,42,27,35,55,48)
plot(age, main = "나이분포", ylab = "나이", col = "green")
# plot(동그라미 점)이 초록색으로 바뀜
# col = "#FF0000" 이렇게로도 색깔 바꿀 수 있음 (빨간색)

 
 
 
 
 
 
 
 
그래프 기본 - 2
 

plot.new()
height <- c(165,170,177,167,180,172,169,179)
weight <- c(70,73,62,80,85,74,75,68)
plot(weight, height, main = "키와 몸무게 분호", xlab = "체중", ylab = "키")

 
 
 
 
 
 
 
실습
 
cars 데이터 불러오기 
산점도 그래프 그려보기
제목과 x축 제목, y축 제목 넣어보기
 

plot(cars$speed, cars$dist, main = "cars 데이터의 산점도")
# 데이터 프레임 형태이기 때문에 $ 이용

 
 
 
 
 
 
 


 
 
 
 
 
 
 
 
type = 'p'        포인트가 점의 형태로 그려짐 (동그라미)
type = 'l'         선의 형태
type = 'o'        점과 선이 중첩되며 통과됨
type = 'h'        히스토그램과 같이 수직선 형태
type = 's/S'     계단형 그래프 
 
 
 
 

plot.new()
height <- c(165,170,177,167,180,172,169,179)
weiht <- c(70,73,62,80,85,74,75,68)

plot(weight, height, main = "키와 몸무게 분포", type = 'o', xlab = " 체중", ylab = "키", 
col = rainbow(length(height)))

# 레인보우를 지정하면 동그라미 색깔이 다르게 나옴
# 8가지 색상을 생성하여 지정

 
 
 
 
 
 
 
 
그래프 기본 - 3
par() 함수 -> 여러 그래프를 한 화면에 그릴 때 유용 
선의 굵기와 종류, 문자의 크기와 글꼴, 색상 지정 
 
 

par(mfrow = c(행의 개수, 열의 개수))

par(mfrow = c(2,3))
2행 3열의 그래프, 한 화면에 6개의 그래프가 그려짐

 
 
 

plot.new()
x <- 1:5
y <- x
x 와 y 모두 1부터 5까지의 데이터를 가지고 있음
par(mfrow = c(2,3))
2행 3열 지정

kind = c('p','b','l','o','s','h')
점의 타입 6개를 kind 에 집어넣음

for(i in 1:length(kind)) {
title <- paste("type=",kind[i])
plot(x,y,type=kind[i],main=title,col=rainbow(6))}

 
 
 
 
1부터 kind의 길이(6번) 반복
 
 
paste() 함수는 R에서 문자열을 연결하는 데 사용됩니다. 
주어진 코드에서 paste("type=", kind[i])는 "type="이라는 텍스트에
 kind[i]의 값을 붙여서 문자열을 생성하는 데 사용되었습니다.

for 루프에서 paste() 함수를 사용하여 kind 벡터의 각 요소를 "type="과 결합하여 새로운 문자열을 생성합니다. 
그 결과, title 변수에는 "type=p", "type=b", "type=l", "type=o", "type=s", "type=h"와 같은 문자열이 순서대로 저장됩니다.
 
 
 
 
 
 
 
 


 
 
 
 
 
 
 

그래프 점과 관련된 points() 함수 
 

plot의 보조함수 
 
 
points(x, y, pch =  점의 형태를 번호로 표시, cex = 점의 크기)
 
 

plot.new()  
par(mfrow = c(1,1))
위에서 2행 3열로 만들었던 차트의 크기를 다시 원래 크기로 복구
plot(1:5, 1:5, main = " 여러 형태의 점")
points(3,2, pch = 2, cex = 2)
x자리 3, y자리 2, 모양은 삼각형, 크기는 2

points(2, pch = 15, cex = 3)
하나만 나오면 저건 y자리, x자리는 지정 안하면 1이라는거

 
 
 
points : 추가적으로 더 점을 그리겠다.
pch : 점의 형태를 번호로 표시한 것 (다양한 모양)
cex : 점의 크기 (숫자가 커질수록 커짐) 
 
 
 
 
 
 
 
 
 
 
 
 

선을 그리는 lines() 함수 

 
 
lines( x, lty = 선의 타입, col = 선 색상, lwd = 선의 굵기) 
 
 

plot.new()
plot(1:5, 1:5, main = " 여러 형태의 선")
lines(c(1,3), c(4,4), lty = "dotted", lwd = 3, col = "red")
앞의 c는 x 좌표 2개, 뒤에 c는 y 좌표 2개 (1,4),(3,4)

lines(c(1,5), lty = "dashed", lwd = 4, col = "blue")
뒤는 y좌표 값 2개로 인식이되므로 (1,1), (2,5) 이다.

 
 
 
 


 
 
 
 
 
 

그래프 안에 선 그리기

abline( )

abline(h = 3, lty = "solid")
y가 3인 위치에 가로로 선을 하나 그리겠음

 
h = horizontal   수평
v = vertical    수직 
 
 
 
 
 

그래프 안에 텍스트 삽입 
text()

text(3, 2, "하위 data군")
(3,2) 자리에 글자넣기

 
 
 
 

범례 삽입

legend( x, y, cex = 글자 크기, col = 색상, lty = 선 종류)
 
 
 
 
 
 
 
 
 
 
 
 

그래프 기본 - 4

 

plot.new()
x <- 1:5
y <- x
plot(x, y, main = "sample")
abline(h = c(1:5), col = "red", lty = "dotted")
1부터 5까지 선을 하나씩 그리겠음
text(3, 3, "기본점")

 
 
 
 
 
 
 
 
 
 

그래프 기본 - 5

plot.new()
height <- c(165,170,177,167,180,172,169,179)
weight<-c(70,73,62,80,85,74,75,68)
irum<-c('김','박','최','신','정','문','오','추')
plot(weight, height, main = "키와 몸무게 분포", type = 'o', pch = 18,
xlab = "체중", ylab = "키", col = rainbow(length(height)))

 
 
 
 
 

abline(h = seq(165, 180, 5), col = "gray", lty = 2)
seq(시작값, 끝 값, 띄는 단위)

 

text(73, 174, "표준", col = "brown")

 

legend("bottomringht", col = rainbow(length(height)), legend = irum, lty = 1)

legend 에 들어가는 내용은 irum
bottom - 밑, top - 위 
 
 
 
 
 
 
 
 
 
 

plot.new()
y1 <- c(0.8,0.5,0.4,0.4,0.5,0.7)
y2 <- c(0.8,1.3,1.0,1.3,0.9,1.2)
x <- c(1:6)

 
 
par(new = TRUE)
원래 그렸던 그래프 위에 새로운 그래프가 중첩되어 그려짐 
 
 

plot(x, y, ylab = "소비자 물가 상승률", type = "o", col = "red", ylim = c(0.3,1.5))
ylim 은 y축의 단위값 - 0.3 에서 시작해서 1.5 까지
par(new = TRUE)
plot(x, y2, ylab = "소비자 물가 상승률", lty = "dotted", type = "l",
col = "blue", ylim = c(0.3, 1.5))
y축 단위 값이 맞아야 어긋나지 않음

 
 
 
legend

legend("bottomright", col = raninbow(length(height)), legend = irum, lty = 1)
legend 에 들어가는 내용은 irum
bottom : 밑, top : 위

 
 
 
 
 
 
 
 
 
 
 

plot.new()
y1 <- c(0.8,0.5,0.4,0.4,0.5,0.7)
y2 <- c(0.8,1.3,1.0,1.3,0.9,1.2)
x <- c(1:6)
par(new = TRUE)
원래 그렸던 그래프 위에 새로운 그래프가 중첩되어 그려짐
plot(x, y1, ylab = "소비자 물가 상승률", type = "o", col = "red", ylim = c(0.3, 1.5)

 
ylim 은 y축의 단위값, 0.3 부터 1.5 까지 
 

par(new = TRUE)
plot(x, y2, ylab = "소비자 물가 상승률", lty = "dotted", type = "l", col = "blue", ylim = c(0.3,1.5)
y축 단위 값이 맞아야 어긋나지 않음

 
 
 
 

legend(locator(1), legend = c("2015년", "2016년"), lty = l, bg = "yellow", col = c("red", "blue"))

 
locator(1) = 사용자가 클릭하는 위치에 범례를 만듦 
 
 
 
 
 
 
 
 
 
 
 
막대 기본 - 1
 

plot.new()
x <- c(100,200,300,350,500)
barplot(x, name = 'a','b','c','d','e'), col = 'yellow')

 
 
 
 
 
막대그래프 응용 1 
 

data <- read.csv("d:\\r1\\seoulpopulation.csv", sep = ", ", header = TRUE, fileEncoding = "euc-kr")

sep : 구분자, 데이터와 데이터 사이는 쉼표로 구분되어있다. 
header = TRUE : 첫번째 글은 머릿글이다

 
 

data
data1 <- subset(data, 남자 >= 230000)
subset : 조건을 주고 데이터 필터링 

data1
gu <- data1$자치구 
data1 에서 자치구열만 모아서 gu라는 데이트를 만듦
barplot(data1$남자,name=gu,las=1,col="darkgreen",horiz=TRUE,
main="서울 남성23만명 이상 거주 자치구")

horiz=TRUE : 가로 막대기 
las=1 글씨를 가로로 안정되게 할 때 추가하는 옵션

 
 
 
 
 
 
 
 
히스토그램
 

plot.new()
x<-c(23,33,32,45,37,28,15,35,43,27,46,33,38,46,50,25)
hist(x, main="연령분포", xlim=c(15,50), col="pink")

x의 구간은 15에서 50까지 
15-20 같이 각 구간에는 몇개씩 있는지 y축에 개수 표시

 
 
 
 
 
 
 
 
 
상자도표 
 
데이터의 분포를 비교하거나, 데이터의 분포에서 많이 벗어난 극단의 데이터를 확인할 떄 사용됨
서로 다른 종류의 데이터의 범위 비교 
 

plot.new()
data <- read.csv("d:\\r1\\birthdie.csv",sep=",",header=TRUE, fileEncoding = "euc-kr")
data
boxplot(data$출생, data$사망, names = c("출생", "사망"), col = c("pink","darkgreen"),
main="서울2013-2014출생사망자 비교")

상자 플롯의 첫 번째 레이블 '출생'은 출생 데이터를 나타내고
두 번째 레이블 '사망'은 사망 데이터를 나타냅니다. 
이를 통해 사용자는 각 상자 플롯이 어떤 데이터를 보여주는지 명확하게 파악할 수 있습니다.












원형 그래프

x <- c(27,43,15)
pie(x, labels = c(“한식“,”일식”,“중식”))
기본은 3시 방향, 위로 올라가며 그려짐

init.angle = 90 : 0부터 (12시 방향)부터 시작 
pie(x, labels = c(“한식“,”일식”,“중식”), init.angle = 90, col = rainbow(length(x)))











3차원 파이차트

install.packages(“plotrix”)
library(plotrix)

label <- c(“영업 1팀“, ”영업 2팀“, ”영업 3팀“, ”영업 4팀“)
pie3D(x, main = “부서별 영업실적”, labels = label, labelcex = 0.8, explode = 0.1)


labelcex = 0.8. : 라벨 크기
explode = 0.1 : 파이 차트간의 떨어짐,  값이 떨어질수록 더 많이 떨어짐