이번시간에는 MASS 패키지에 있는 Cars93데이터를 이용하여 시각화를 해보도록 하겠습니다. Cars93데이터는 column이 27개나 있으므로 1열부터8열까지 짤라서 보기로 하겠습니다.
> library(ggplot2)
> library(MASS)
> df <- Cars93[,1:8]
> head(df)
Manufacturer Model Type Min.Price Price Max.Price MPG.city MPG.highway
1 Acura Integra Small 12.9 15.9 18.8 25 31
2 Acura Legend Midsize 29.2 33.9 38.7 18 25
3 Audi 90 Compact 25.9 29.1 32.3 20 26
4 Audi 100 Midsize 30.8 37.7 44.6 19 26
5 BMW 535i Midsize 23.7 30.0 36.2 22 30
6 Buick Century Midsize 14.2 15.7 17.3 22 31
> str(df)
'data.frame': 93 obs. of 8 variables:
$ Manufacturer: Factor w/ 32 levels "Acura","Audi",..: 1 1 2 2 3 4 4 4 4 5 ...
$ Model : Factor w/ 93 levels "100","190E","240",..: 49 56 9 1 6 24 54 74 73 35 ...
$ Type : Factor w/ 6 levels "Compact","Large",..: 4 3 1 3 3 3 2 2 3 2 ...
여기서는 두변수가 연속형인 경우 Min.Price와 Max.Price를 이용하여 그래프를 그려보도록 하겠습니다.
주로 사용하는 그래프는 다음과같습니다.
산점도 / 산포도 geom_point( )
선 그래프 geom_line( )
박스플롯 geom_boxplot( )
히스토그램 geom_histogram( )
막대 그래프 geom_bar( )
> ## 두변수다 연속형인 경우
> ggplot(data=df,
+ mapping=aes(x=Min.Price,
+ y=Max.Price))+geom_point(colour="blue",
+ size=2,
+ pch=3)+
+ ggtitle("scatter")
> ggplot(data=df,
+ mapping=aes(x=Min.Price,
+ y=Max.Price))+geom_line()+
+ ggtitle("LINE")
그룹별로 색상,모양,크기 다르게하기
Type은 6가지 종류가 있고 각각 size(크기), pch(모양), colour(색상)을 다르게 해서 그래프로 표현한다.
> # colour는 색상, pch는 모양 ,#size는 크기 // colours는 뭘까 ??
> table(df$Type)
Compact Large Midsize Small Sporty Van
16 11 22 21 14 9
> ggplot(data=df,
+ mapping=aes(x=Min.Price,
+ y=Max.Price))+geom_point(colour=c("red","blue","pink","green","yellow","black")[df$Type],
+ pch=c(3,5,7,10,13,15)[df$Type],
+ size=c(1,2,3,4,5,6)[df$Type])+
+ ggtitle("scatter")
데이터가 겹치는 부분 표시하기(Compact,Large,Midsize겹치는 부분 색상으로는red,blue,pink)
> g <- ggplot(data=df,
+ mapping=aes(x=Min.Price,
+ y=Max.Price))+geom_point(colour=c("red","blue","pink","green","yellow","black")[df$Type],
+ size=2)
> #type별로 최소값,최댓값구하기기
> df_range <- df %>% group_by(Type) %>%
+ summarise(min_x=min(Min.Price),
+ max_x=max(Min.Price),
+ min_y=min(Max.Price),
+ max_y=max(Max.Price))
> df_range
# A tibble: 6 x 5
Type min_x max_x min_y max_y
* <fct> <dbl> <dbl> <dbl> <dbl>
1 Compact 8.5 29 11.4 37.1
2 Large 17.5 34.4 18.4 37.8
3 Midsize 12.4 45.4 14.9 80
4 Small 6.7 12.9 7.9 18.8
5 Sporty 9.1 34.6 11 41.5
6 Van 13.6 19.5 18 26.6
#compact,large, midsize의 최소,최댓값만 추출
df_range <- df_range[1:3,]
start_x <- max(df_range$min_x)
end_x <- min(df_range$max_x)
start_y <- max(df_range$min_y)
end_y <- min(df_range$max_y)
g+ annotate(geom="rect", #annotate = 주석을 달다.
xmin=start_x,
xmax=end_x,
ymin=start_y,
ymax=end_y,
fill="red",
alpha=0.3, # 알파는 투명도
colour="black",
lty=2)
> #선으로 구분하기
> g+annotate(geom="segment",
+ x=c(start_x,end_x,-Inf,-Inf),
+ xend= c(start_x,end_x,Inf,Inf),
+ y=c(-Inf,-Inf,end_y,start_y),
+ yend=c(Inf,Inf,end_y,start_y),
+ colour="black",
+ alpha=0.3,
+ lty=2,
+ size=1)
> #행번호 표시하기
> g+annotate(geom="text",
+ x=df$Min.Price,
+ y=df$Max.Price,
+ label=rownames(df),
+ colour="black",
+ alpha=0.5,
+ size=3,
+ hjust=0.5, #숫자 위치를 x축으로 옮길수있음
+ vjust=-1) #숫자 위치를 y축으로 옮길수있음
g+coord_flip() #x축 y축 바꾸기
g+coord_cartesian(xlim=c(20,30),
ylim=c(20,40)) #x,y축 범위 제한하기
> #글 지정해서 넣기기
> g+labs(title="Cars93 scatter",
+ subtitle="sub title",
+ caption="jinuk",
+ x="최소가격",
+ y="최대가격")
'R' 카테고리의 다른 글
R 버전 확인 및 변경하기 (다운그레이드,업그레이드) (0) | 2021.04.07 |
---|---|
Randomforest로 사이영 상 수상 예측하기 (0) | 2021.04.06 |
ggplot2를 이용한 시각화 ② (회귀선표시, 회귀분석, 범례표시) (0) | 2021.04.05 |
DPLYR를 이용한 Cars93처리 ② (0) | 2021.04.05 |
DPLYR를 이용한 Cars93처리 ① (0) | 2021.04.04 |