barcode

R 배워보기-8.3. Basic graphs with standard graphics

Coding/R

참고로 이번꺼는 ggplot 안 데려와도 된다. 

근데 라이브러리 깔긴 해야됨... 

install.packages("sm")
install.packages("car")

네 두개 깔고 오세여. 


히스토그램과 밀도 곡선

> set.seed(1)
> rating=rnorm(200)
> head(rating)
[1] -0.6264538  0.1836433 -0.8356286  1.5952808  0.3295078 -0.8204684
> rating2=rnorm(200,mean=.8)
> head(rating2)
[1]  1.2094018  2.4888733  2.3865884  0.4690922 -1.4852355  3.2976616

다들 이쯤되면 알잖음? 히스토그램은 역사와 전통의 난수생성... 

> cond=factor(rep(c("A","B"),each=200))
> data=data.frame(cond,rating=(c(rating,rating2)))
> head(data)
  cond     rating
1    A -0.6264538
2    A  0.1836433
3    A -0.8356286
4    A  1.5952808
5    A  0.3295078
6    A -0.8204684

근데 이게 데이터프레임까지 만들 일이냐? 

 

> hist(rating)

기본적인 히스토그램은 이렇게 생겼다. 

 

> hist(rating,breaks=8,col="#ccccff",freq=FALSE)

색깔 말고 다를게 없는디? 

 

> boundaries=seq(-3,3.6,by=.6)
> boundaries
 [1] -3.0 -2.4 -1.8 -1.2 -0.6  0.0  0.6  1.2  1.8  2.4  3.0  3.6
> hist(rating,breaks=boundaries)

밀도? 아 그 빈도 간격 간격 

아무튼 그것도 조절 가능함..

 

밀도 곡선

> plot(density(rating))

밀도 곡선도 된다. 

 

plot.multi.dens <- function(s)
{
    junk.x = NULL
    junk.y = NULL
    for(i in 1:length(s)) {
        junk.x = c(junk.x, density(s[[i]])$x)
        junk.y = c(junk.y, density(s[[i]])$y)
    }
    xr <- range(junk.x)
    yr <- range(junk.y)
    plot(density(s[[1]]), xlim = xr, ylim = yr, main = "")
    for(i in 1:length(s)) {
        lines(density(s[[i]]), xlim = xr, ylim = yr, col = i)
    }
}

사전에 함수 정의하면

 

> plot.multi.dens( list(rating, rating2))

이거 그럼 함수 정의 안하면 두개 안된다는 얘기 아니냐... 

 

> library(sm)
Package 'sm', version 2.2-5.7: type help(sm) for summary information
> sm.density.compare(data$rating,data$cond)

sm 라이브러리 불러온게 훨 낫네. 

 

산점도

> set.seed(2)
> dat <- data.frame(xvar = 1:20 + rnorm(20,sd=3),
+                   yvar = 1:20 + rnorm(20,sd=3),
+                   zvar = 1:20 + rnorm(20,sd=3))

(대충 난수 만들었다는 얘기)

 

> plot(dat$xvar,dat$yvar)

평범한 산점도는 이렇게 생겼다. 그럼 회귀곡선 되나요? 

 

> fitline=lm(dat$xvar~dat$yvar)
> abline(fitline)

예 됩니다. 아 참고로 산점도 그리는 코드가 두 가지인데 하나는 위에 있고 다른 하나가 

> plot(xvar~zvar,dat)

이거다. 

 

산점도 매트릭스 

아누형 나올 것 같잖아 산점도에서 키아누 리브스 나오냐고 

 

> plot(dat[,1:3])

아니 근데 이거 어케 해석하는겨 ㄷㄷ 

 

> library(car)
필요한 패키지를 로딩중입니다: carData
> scatterplotMatrix(dat[,1:3],diagonal="histogram",smooth=FALSE)
경고메시지(들): 
In applyDefaults(diagonal, defaults = list(method = "adaptiveDensity"),  :
  unnamed diag arguments, will be ignored

car 라이브러리 불러오면 이런것도 된다. ...뭐야 내 히스토그램 돌려줘요! 

 

박스 그래프

> boxplot(len~supp,data=ToothGrowth)

내장 데이터인 ToothGrowth를 써 볼건데... 

 

이게 len/supp boxplot이고 

이건 len/dose 그래프이다. 근데 아니 이거 일일이 그리기 귀찮은데 한번에 안돼요? 

 

> boxplot(len~interaction(dose,supp),data=ToothGrowth)

야 이럴거면 ggplot은 왜 까냐... 색깔 입히려고 

 

> plot(len~interaction(dose,supp),data=ToothGrowth)

참고로 이것도 같은 코드다. 

 

Q-Q plot

이거 근데 뭐 하는 그래프냐... 

 

> set.seed(3)
> x=rnorm(80,mean=50,sd=5)
> z=runif(80)

일단 난수부터 만들고 시작해보자. 

 

> qqnorm(x)

이렇게 하면 qqplot이 나온다. 

 

> qqline(x)

얘까지 하면 선이 보인다. 

 

> qqnorm(x^4)
> qqline(x^4)

(같은 그래프 우려먹기 아님)

 

> qqnorm(z)
> qqline(z)

(변수 바꿨음)