Author : tmlab / Date : 2016. 10. 4. 01:04 / Category : Lecture/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")
도형 | 함수 |
---|---|
점 | 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”라는 글을 씀 |
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)
var1<- 1:5
plot(var1)
var2<-rep(2,5)
plot(var2)
x<-1:5
y<-5:1
plot(x,y)
x<-1:5
y<-5:1
plot(x,y,xlim=c(1,10),ylim=c(1,5))
x<-1:5
y<-5:1
plot(x,y,xlab="X축",ylab="Y축",main="test 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")
par(mfrow=c(1,3))
plot(v1,type="o")
plot(v1,type="s")
plot(v1,type="l")
par(mfrow=c(1,1))
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")
plot(v1,type="o",col="red",ylim=c(0,10))
lines(v2,type="l",col="blue")
lines(v3,type="s",col="yellow")
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)
x<-1:5
barplot(x)
barplot(x,horiz=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)) )
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
정확히 상자와 수염 그림(box and whisker plot)은 두 개 이상의 집단의 상대적 비교를 위해서 각 집단의 최대값(max)과 최소값(min) 그리고 중앙값(자료를 크기순으로 나열했을 때 가운데 위치하는 값: median) 및 사분위수(자료를 크기 순서에 따라 늘어놓은 자료를 4등분 했을 때 위치하는 값을 의미함) 제 1사분위수(아래에서 25% 백분위점에 위치하는 수: Q1), 제 3사분위수(아래에서 75% 백분위점에 위치하는 수: Q3)등 다섯 숫자를 요약하여 그래프로 나타내는 방법으로 John W. Tukey가 제안한 탐색적 데이터 분석 방법입니다.
Box plot에서 상자 안의 직선은 중위수를 의미하고 상자의 양쪽 끝은 두 개의 사분위수를 그리고 상자의 양쪽에 이상치를 제외한 최대 및 최소값을 잇는 수염을 직선으로 그려줌으로써 데이터의 전체적 분포 양상을 쉽게 파악할 수 있습니다.
수염의 범위를 벗어난 점들은 이상치(outlier)들을 나타냅니다.
인수 | 설명 | 예시 |
---|---|---|
formula | “~”문자를 사용 | y축 변수~x축 변수 |
subset | subset함수랑 동일 | |
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 |
col | plot의 내부 색상 지정 | |
log | 좌표축을 로그 스케일로 변환 | |
horizontal | 가로로 출력 여부 | T or F |
staplelty | 최대 최소값 나타내는 선 종류를 지정 | |
outpch | 이상치 나타내는 점 종류 지정 |
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)
식으로 그릴 경우, 각 group별로 boxplot이 그려지게 됩니다
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)
x<-1:5
boxplot(x, border="magenta", col=c("lightblue"))
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")
p1 <- c(10,20,30,40)
pie(p1,radius=1)
pie(p1,radius=1,init.angle=90)
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)
각 변수별로 산점도를 그려보는 시각화 방법입니다.
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)])