Visualization

Multivariate Data Analysis

Multivariate Data Visualization

Yeongeun Jeon
09-24-2022

1. 다변량 데이터의 시각화


1-1. 다변량 데이터 예제

pacman::p_load("ggplot2")

# 데이터 불러오기
data(iris)
data(mpg)

# 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
# mpg 데이터head(mpg)
# A tibble: 6 x 11
  manufacturer model displ  year   cyl trans   drv     cty   hwy fl   
  <chr>        <chr> <dbl> <int> <int> <chr>   <chr> <int> <int> <chr>
1 audi         a4      1.8  1999     4 auto(l~ f        18    29 p    
2 audi         a4      1.8  1999     4 manual~ f        21    29 p    
3 audi         a4      2    2008     4 manual~ f        20    31 p    
4 audi         a4      2    2008     4 auto(a~ f        21    30 p    
5 audi         a4      2.8  1999     6 auto(l~ f        16    26 p    
6 audi         a4      2.8  1999     6 manual~ f        18    26 p    
# ... with 1 more variable: class <chr>

2. 산점도


2-1. 2차원 산점도


2-1-1. 함수 plot()

# iris 데이터## 함수 plot()plot(iris$Sepal.Length,                    # x축      iris$Sepal.Width,                     # y축     xlab = "꽃받침의 길이"              # # x축 라벨NA= "꽃받침의 너비"               ## y축 라벨     main = "iris 데이터의 2차원 산점도")# # 제목NA

Caution! 함수 plot()의 댜양한 옵션을 통해 그래프를 수정할 수 있으며, 자세한 옵션은 여기를 참고한다.

# iris 데이터## 함수 plot()plot(iris$Sepal.Length,                      # x축      iris$Sepal.Width,                       # y축     xlab = "꽃받침의 길이"                # # x축 라벨NA= "꽃받침의 너비"                 ## y축 라벨     main = "iris 데이터의 2차원 산점도"   # # 제목NA= 3,                                # 점의 모양     cex = 3,                                # 점의 크기     col = "red")                            # 점의 색깔

# mpg 데이터##함수 plot()plot(mpg$displ,                             # x축      mpg$cty,                               # y축     xlab = "배기량"",                      # x축 라벨벨
     ylab = "도시 연비"비",                  # y축 라벨라벨
     main = "mpg 데이터의 2차원 산점도")  # # 제목NA
# mpg 데이터## 함수 plot()plot(mpg$displ,                            # x축      mpg$cty,                              # y축     xlab = "배기량"",                     # x축 라벨벨
     ylab = "도시 연비"비",                 # y축 라벨라벨
     main = "mpg 데이터의 2차원 산점도"  # # 제목NA= 5,                              # 점의 모양     cex = 3,                              # 점의 크기     col = "blue")                         # 점의 색깔


2-1-2. 함수 geom_point()

# iris 데이터## 함수 geom_point()ggplot(iris, aes(x = Sepal.Length,           # x축                 y = Sepal.Width)) +         # y축  geom_point() +
  labs(x = "꽃받침의 길이"                 # # x축 라벨NA= "꽃받침의 너비"                  ## y축 라벨       title = "iris 데이터의 2차원 산점도") # 제목NA

Caution! Package ggplot2의 댜양한 옵션을 통해 그래프를 수정할 수 있다.

# iris 데이터## 함수 geom_point()ggplot(iris, aes(x = Sepal.Length,             # x축                 y = Sepal.Width)) +           # y축  geom_point(shape  = 3,                       # 점의 모양             size   = 3,                       # 점의 크기             color = "red") +                  # 점의 색깔            labs(x = "꽃받침의 길이"                   # # x축 라벨NA= "꽃받침의 너비"                    ## y축 라벨       title = "iris 데이터의 2차원 산점도") + # 제목NAtheme_bw() +                                 # 배경
  theme(plot.title = element_text(hjust = 0.5, size = 15))

# mpg 데이터## 함수 geom_point()ggplot(mpg, aes(x = displ,                    # x축                 y = cty)) +                  # y축  geom_point() +
  labs(x = "배기량"",                         # x축 라벨벨
       y = "도시 연비"비",                     # y축 라벨라벨
       title = "mpg 데이터의 2차원 산점도") # # 제목NA
# mpg 데이터## 함수 geom_point()ggplot(mpg, aes(x = displ,                    # x축                 y = cty)) +                  # y축  geom_point(shape = 5,                       # 점의 모양             size  = 3,                       # 점의 크기             color = "blue") +                # 점의 색깔            labs(x = "배기량"",                         # x축 라벨벨
       y = "도시 연비"비",                     # y축 라벨라벨
       title = "mpg 데이터의 2차원 산점도") + # 제목NAtheme_bw() +                                # 배경
  theme(plot.title = element_text(hjust = 0.5, size = 15))


2-1-3. 함수 matplot()

# iris 데이터matplot(iris[,1:4], 
        pch = 1:4,                                  # 점의 모양        col = c("red", "blue", "green", "orange"),  # 점의 색깔        main = "iris 데이터의 산점도"              ## 제목        xlab = "개체"",                             # x축 라벨벨
        ylab = "")                                  # y축 라벨
# mpg 데이터matplot(mpg[,c("displ", "cty", "hwy")],
        pch = 6:8,                                  # 점의 모양        col = c("black", "skyblue", "purple"),      # 점의 색깔        main = "mpg 데이터의 산점도"               ## 제목        xlab = "개체"",                             # x축 라벨벨
        ylab = "")                                  # y축 라벨


2-2. 3차원 산점도


2-2-1. 함수 scatterplot3d()

pacman::p_load("scatterplot3d")

# iris 데이터scatterplot3d(iris[,1:3],
              pch = 3,                             # 점의 모양              color = "red",                       # 점의 색깔              main = "iris 데이터의 3차원 산점도"# # 제목NA= "꽃받침의 길이"             # # x축 라벨NA= "꽃받침의 너비"              ## y축 라벨              zlab = "꽃잎의 길이"              # z# z축 라벨NA)
# mpg 데이터scatterplot3d(x = mpg$displ,                       # x축              y = mpg$cty,                         # y축              z = mpg$hwy,                         # z축              pch = 5,                             # 점의 모양              color = "blue",                      # 점의 색깔              main = "mpg 데이터의 3차원 산점도" # # 제목NA= "배기량"",                    # x축 라벨벨
              ylab = "도시 연비"비",                # y축 라벨라벨
              zlab = "고속도로 연비"비",            # z축 라벨라벨
              angle = 50,                          # 각도각도
              box = FALSE,                         # 상자 그림을 나타낼 것인지 여부부
              grid = FALSE                         # 격자를 나타낼 것인지 여부)


2-2-2. 함수 scatter3D()

pacman::p_load("plot3D")

# iris 데이터scatter3D(x = iris$Sepal.Length,               # x축          y = iris$Sepal.Width,                # y축          z = iris$Petal.Length,               # z축          pch = 3,                             # 점의 모양          col = gg.col(100),                   # 색깔 
          main ="iris 데이터의 3차원 산점도" # # 제목NA= "꽃받침의 길이"             # # x축 라벨NA= "꽃받침의 너비"              ## y축 라벨          zlab = "꽃잎의 길이"              # z# z축 라벨NA= "f"                            # 박스 타입
)
# mpg 데이터scatter3D(x = mpg$displ,                       # x축          y = mpg$cty,                         # y축          z = mpg$hwy,                         # z축          pch = 5,                             # 점의 모양          colvar = NULL, col = "blue",         # 오로지 한 색깔만 표시하고 싶을 때 옵션          colkey = FALSE,                      # 색깔 범례 표시 여부부
          main = "mpg 데이터의 3차원 산점도" # # 제목NA= "배기량"",                    # x축 라벨벨
          ylab = "도시 연비"비",                # y축 라벨라벨
          zlab = "고속도로 연비"비",            # z축 라벨라벨
          bty = "b2"                           # 박스 타입
)


2-2-3. 함수 plot_ly()

pacman::p_load("plotly")

# iris 데이터plot_ly(iris, 
        x = ~Sepal.Length,                                     # x축        y = ~Sepal.Width,                                      # y축        z = ~Petal.Length) %>%                                 # z축  add_markers() %>%
  layout(title = "iris 데이터의 3차원 산점도"                # # 제목NA= list(xaxis = list(title = "꽃받침의 길이")  # # x축 라벨NA= list(title = "꽃받침의 너비")   ## y축 라벨                      zaxis = list(title = "꽃잎의 길이"))) # z# z축 라벨NA
# mpg 데이터plot_ly(mpg, 
        x = ~displ,                                            # x축        y = ~cty,                                              # y축        z = ~hwy,                                              # z축        mode = "markers",
        marker = list(color = "green")) %>%                    # 색깔
  add_markers() %>%
  layout(title = "mpg 데이터의 3차원 산점도"                 # # 제목NA= list(xaxis = list(title = "배기량")),         # x축 라벨벨
                      yaxis = list(title = "도시 연비")"),     # y축 라벨라벨
                      zaxis = list(title = "고속도로 연비")))))# z축 라벨라벨

2-3. 산점도 행렬


2-3-1. 함수 pairs()

# iris 데이터## 함수 pairs()pairs(iris[,1:4],
      main = "iris 데이터의 산점도 행렬")# # 제목NA

Caution! 함수 pairs()의 댜양한 옵션을 통해 그래프를 수정할 수 있으며, 자세한 옵션은 여기를 참고한다.

# iris 데이터## 함수 pairs()pairs(iris[,1:4],
      main = "iris 데이터의 산점도 행렬" # # 제목NA= 3,                             # 점의 모양      cex = 3,                             # 점의 크기      col = "red",                         # 점의 색깔      lower.panel = NULL)                  # 대각선 아래쪽 그래프 안보이게이게

# mpg 데이터## 함수 pairs()pairs(mpg[,c("displ", "cty", "hwy")],
      main = "mpg 데이터의 산점도 행렬") # # 제목NA
# mpg 데이터## 함수 pairs()pairs(mpg[,c("displ", "cty", "hwy")],
      main = "mpg 데이터의 산점도 행렬"  # # 제목NA= 3,                             # 점의 모양      cex = 3,                             # 점의 크기      col = "red",                         # 점의 색깔      lower.panel = NULL)                  # 대각선 아래쪽 그래프 안보이게이게


2-3-2. 함수 ggpairs()

pacman::p_load("GGally")

# iris 데이터## 함수 ggpairs()ggpairs(iris[,1:4],
        title = "iris 데이터의 산점도 행렬") +# # 제목NAtheme_bw() +                                  # 배경
  theme(plot.title = element_text(hjust = 0.5, size = 15)) 
# mpg 데이터## 함수 ggpairs()ggpairs(mpg[,c("displ", "cty", "hwy")],
        title = "mpg 데이터의 산점도 행렬") +# # 제목NAtheme_bw() +                                 # 배경
  theme(plot.title = element_text(hjust = 0.5, size = 15))


3. 별도표

# iris 데이터stars(iris[,1:4],
      full = TRUE,                                  # 전체 원으로 표현할 것인지 반원으로 표현할 것인지 여부NA= TRUE,                                 # 각 변수를 0과 1사이의 값으로 척도화할 것인지 여부부
      radius = TRUE,                                # 반경 선을 표현할 것인지 여부NA= rownames(iris),                      # 라벨벨
      draw.segments = FALSE,                        # 원으로 표현할 것이지 별 모양으로 표현할 것인지 여부NA= FALSE,                          # 라벨 위치 이동 여부여부
      frame.plot = TRUE,                            # 외곽의 사각형틀을 나타낼 것인지 여부
      main = "iris 데이터의 개체별 거리"",          # 제목목
      nrow = 10,                                    # 행의 수NA= c(32, -2))                         # 변수 이름을 표현하는 별도의 도표 좌표
# mpg 데이터stars(mpg[,c("displ", "cty", "hwy")],
      full = FALSE,                                 # 전체 원으로 표현할 것인지 반원으로 표현할 것인지 여부NA= TRUE,                                 # 각 변수를 0과 1사이의 값으로 척도화할 것인지 여부부
      radius = TRUE,                                # 반경 선을 표현할 것인지 여부NA= rownames(mpg),                       # 라벨벨
      draw.segments = TRUE,                         # 원으로 표현할 것이지 별 모양으로 표현할 것인지 여부NA= FALSE,                          # 라벨 위치 이동 여부여부
      frame.plot = TRUE,                            # 외곽의 사각형틀을 나타낼 것인지 여부
      main = "mpg 데이터의 개체별 거리"",           # 제목목
      nrow = 14,                                    # 행의 수NA= c(35, 1))                          # 변수 이름을 표현하는 별도의 도표 좌표


4. 레이더도표


4-1. 함수 radial.plot()

pacman::p_load("plotrix")

# iris 데이터radial.plot(iris[,1:4],
            rp.type = "rp",                         # 도표의 유형            radial.lim = c(0, 10),                  # 방사선의 범위
            labels = names(iris)[1:4],              # 각 변수에 대한 문자열 레이블이 저장되어 있는 벡터를 지정            show.grid = TRUE,                       # 원형 격자를 표현할 것인지 여부NA= FALSE,               # 방사선을 표현할 것인지 여부NA= "iris 데이터의 레이더도표"      ## 제목            )
# mpg 데이터radial.plot(mpg[,c("displ", "cty", "hwy")],
            rp.type = "rp",                         # 도표의 유형            radial.lim = c(0, 50),                  # 방사선의 범위
            labels = c("displ", "cty", "hwy"),      # 각 변수에 대한 문자열 레이블이 저장되어 있는 벡터를 지정            show.grid = TRUE,                       # 원형 격자를 표현할 것인지 여부NA= TRUE,                # 방사선을 표현할 것인지 여부NA= "mpg 데이터의 레이더도표"       ## 제목)


Caution! 각 개체별 레이더도표를 작성하기 위해 반복문 for()를 이용할 수 있다.

# 개체별 레이더도표더도표
par(mfrow = c(2, 2))
for(i in 1:4){
  radial.plot(iris[i,1:4],
              rp.type = "rp",                         # 도표의 유형              radial.lim = c(0, 10),                  # 방사선의 범위
              rad.col = "grey",                       # 방사선 색깔깔
              line.col = "red",                       # 선 색깔깔
              labels = names(iris)[1:4],              # 각 변수에 대한 문자열 레이블이 저장되어 있는 벡터를 지정              show.grid = TRUE,                       # 원형 격자를 표현할 것인지 여부NA= TRUE,                # 방사선을 표현할 것인지 여부NA= rownames(iris)[i]                # 제목
  )
}


4-2. 함수 stars()

# iris 데이터stars(iris[,1:4],
      locations = c(0, 0),
      col.lines = 1:nrow(iris),                     # 선의 색상을 행의 수 만큼 지정NA= FALSE,                           # 외곽의 사각형틀을 나타낼 것인지 여부
      main = "iris 데이터의 레이더도표"            ## 제목      key.loc  = c(0, 0))                           # 변수 이름을 표현하는 별도의 도표 좌표
# mpg 데이터stars(mpg[,c("displ", "cty", "hwy")],              
      locations = c(0, 0),                               
      col.lines = 1:nrow(mpg),                      # 선의 색상을 행의 수 만큼 지정NA= FALSE,                           # 외곽의 사각형틀을 나타낼 것인지 여부
      main = "mpg 데이터의 레이더도표"             ## 제목      key.loc  = c(0, 0))                           # 변수 이름을 표현하는 별도의 도표 좌표


4-3. 함수 radarchart()

pacman::p_load("fmsb")

# iris 데이터radar.iris.data <- rbind(rep(10, 4), rep(0, 4), iris[,1:4])
radar.iris.data                                                                  # 함수 radarchart()는 첫 행은 각 변수의 최댓값, 두 번째 행은 각 변수의 최솟값이어야 함NA
    Sepal.Length Sepal.Width Petal.Length Petal.Width
1           10.0        10.0         10.0        10.0
2            0.0         0.0          0.0         0.0
3            5.1         3.5          1.4         0.2
4            4.9         3.0          1.4         0.2
5            4.7         3.2          1.3         0.2
6            4.6         3.1          1.5         0.2
7            5.0         3.6          1.4         0.2
8            5.4         3.9          1.7         0.4
9            4.6         3.4          1.4         0.3
10           5.0         3.4          1.5         0.2
11           4.4         2.9          1.4         0.2
12           4.9         3.1          1.5         0.1
13           5.4         3.7          1.5         0.2
14           4.8         3.4          1.6         0.2
15           4.8         3.0          1.4         0.1
16           4.3         3.0          1.1         0.1
17           5.8         4.0          1.2         0.2
18           5.7         4.4          1.5         0.4
19           5.4         3.9          1.3         0.4
20           5.1         3.5          1.4         0.3
21           5.7         3.8          1.7         0.3
22           5.1         3.8          1.5         0.3
23           5.4         3.4          1.7         0.2
24           5.1         3.7          1.5         0.4
25           4.6         3.6          1.0         0.2
26           5.1         3.3          1.7         0.5
27           4.8         3.4          1.9         0.2
28           5.0         3.0          1.6         0.2
29           5.0         3.4          1.6         0.4
30           5.2         3.5          1.5         0.2
31           5.2         3.4          1.4         0.2
32           4.7         3.2          1.6         0.2
33           4.8         3.1          1.6         0.2
34           5.4         3.4          1.5         0.4
35           5.2         4.1          1.5         0.1
36           5.5         4.2          1.4         0.2
37           4.9         3.1          1.5         0.2
38           5.0         3.2          1.2         0.2
39           5.5         3.5          1.3         0.2
40           4.9         3.6          1.4         0.1
41           4.4         3.0          1.3         0.2
42           5.1         3.4          1.5         0.2
43           5.0         3.5          1.3         0.3
44           4.5         2.3          1.3         0.3
45           4.4         3.2          1.3         0.2
46           5.0         3.5          1.6         0.6
47           5.1         3.8          1.9         0.4
48           4.8         3.0          1.4         0.3
49           5.1         3.8          1.6         0.2
50           4.6         3.2          1.4         0.2
51           5.3         3.7          1.5         0.2
52           5.0         3.3          1.4         0.2
53           7.0         3.2          4.7         1.4
54           6.4         3.2          4.5         1.5
55           6.9         3.1          4.9         1.5
56           5.5         2.3          4.0         1.3
57           6.5         2.8          4.6         1.5
58           5.7         2.8          4.5         1.3
59           6.3         3.3          4.7         1.6
60           4.9         2.4          3.3         1.0
61           6.6         2.9          4.6         1.3
62           5.2         2.7          3.9         1.4
63           5.0         2.0          3.5         1.0
64           5.9         3.0          4.2         1.5
65           6.0         2.2          4.0         1.0
66           6.1         2.9          4.7         1.4
67           5.6         2.9          3.6         1.3
68           6.7         3.1          4.4         1.4
69           5.6         3.0          4.5         1.5
70           5.8         2.7          4.1         1.0
71           6.2         2.2          4.5         1.5
72           5.6         2.5          3.9         1.1
73           5.9         3.2          4.8         1.8
74           6.1         2.8          4.0         1.3
75           6.3         2.5          4.9         1.5
76           6.1         2.8          4.7         1.2
77           6.4         2.9          4.3         1.3
78           6.6         3.0          4.4         1.4
79           6.8         2.8          4.8         1.4
80           6.7         3.0          5.0         1.7
81           6.0         2.9          4.5         1.5
82           5.7         2.6          3.5         1.0
83           5.5         2.4          3.8         1.1
84           5.5         2.4          3.7         1.0
85           5.8         2.7          3.9         1.2
86           6.0         2.7          5.1         1.6
87           5.4         3.0          4.5         1.5
88           6.0         3.4          4.5         1.6
89           6.7         3.1          4.7         1.5
90           6.3         2.3          4.4         1.3
91           5.6         3.0          4.1         1.3
92           5.5         2.5          4.0         1.3
93           5.5         2.6          4.4         1.2
94           6.1         3.0          4.6         1.4
95           5.8         2.6          4.0         1.2
96           5.0         2.3          3.3         1.0
97           5.6         2.7          4.2         1.3
98           5.7         3.0          4.2         1.2
99           5.7         2.9          4.2         1.3
100          6.2         2.9          4.3         1.3
101          5.1         2.5          3.0         1.1
102          5.7         2.8          4.1         1.3
103          6.3         3.3          6.0         2.5
104          5.8         2.7          5.1         1.9
105          7.1         3.0          5.9         2.1
106          6.3         2.9          5.6         1.8
107          6.5         3.0          5.8         2.2
108          7.6         3.0          6.6         2.1
109          4.9         2.5          4.5         1.7
110          7.3         2.9          6.3         1.8
111          6.7         2.5          5.8         1.8
112          7.2         3.6          6.1         2.5
113          6.5         3.2          5.1         2.0
114          6.4         2.7          5.3         1.9
115          6.8         3.0          5.5         2.1
116          5.7         2.5          5.0         2.0
117          5.8         2.8          5.1         2.4
118          6.4         3.2          5.3         2.3
119          6.5         3.0          5.5         1.8
120          7.7         3.8          6.7         2.2
121          7.7         2.6          6.9         2.3
122          6.0         2.2          5.0         1.5
123          6.9         3.2          5.7         2.3
124          5.6         2.8          4.9         2.0
125          7.7         2.8          6.7         2.0
126          6.3         2.7          4.9         1.8
127          6.7         3.3          5.7         2.1
128          7.2         3.2          6.0         1.8
129          6.2         2.8          4.8         1.8
130          6.1         3.0          4.9         1.8
131          6.4         2.8          5.6         2.1
132          7.2         3.0          5.8         1.6
133          7.4         2.8          6.1         1.9
134          7.9         3.8          6.4         2.0
135          6.4         2.8          5.6         2.2
136          6.3         2.8          5.1         1.5
137          6.1         2.6          5.6         1.4
138          7.7         3.0          6.1         2.3
139          6.3         3.4          5.6         2.4
140          6.4         3.1          5.5         1.8
141          6.0         3.0          4.8         1.8
142          6.9         3.1          5.4         2.1
143          6.7         3.1          5.6         2.4
144          6.9         3.1          5.1         2.3
145          5.8         2.7          5.1         1.9
146          6.8         3.2          5.9         2.3
147          6.7         3.3          5.7         2.5
148          6.7         3.0          5.2         2.3
149          6.3         2.5          5.0         1.9
150          6.5         3.0          5.2         2.0
151          6.2         3.4          5.4         2.3
152          5.9         3.0          5.1         1.8
radarchart(radar.iris.data,
           title = "iris 데이터의 레이더도표")
# mpg 데이터radar.mpg.data <- rbind(rep(50, 3), rep(0, 3), mpg[,c("displ", "cty", "hwy")])   # 함수 radarchart()는 첫 행은 각 변수의 최댓값, 두 번째 행은 각 변수의 최솟값이어야 함NAradar.mpg.data
# A tibble: 236 x 3
   displ   cty   hwy
   <dbl> <dbl> <dbl>
 1  50      50    50
 2   0       0     0
 3   1.8    18    29
 4   1.8    21    29
 5   2      20    31
 6   2      21    30
 7   2.8    16    26
 8   2.8    18    26
 9   3.1    18    27
10   1.8    18    26
# ... with 226 more rows
radarchart(radar.mpg.data,
           title = "mpg 데이터의 레이더도표")


5. 버블차트


5-1. 함수 symbols()

# iris 데이터symbols(iris$Sepal.Length,                                              # x축        iris$Sepal.Width,                                               # y축        circles = iris$Petal.Length,                                    # 원의 반지름 벡터        inches = 0.4,                                                   # 원의 크기        bg = "grey50",                                                  # 원의 배경색        fg = "black",                                                   # 원의 테투리색NA= "꽃받침의 길이"                                        # # x축 라벨NA= "꽃받침의 너비"                                         ## y축 라벨        main = "iris 데이터의 꽃받침의 길이와 너비에 따른 꽃잎의 길이")NA# 제목NA
# mpg 데이터op <- palette(rainbow(nrow(mpg)))                                       # 색깔

symbols(mpg$cty,                                                        # x축        mpg$hwy,                                                        # y축        circles = mpg$displ,                                            # 원의 반지름 벡터        inches = 0.4,                                                   # 원의 크기        bg = op,                                                        # 원의 배경색        fg = "black",                                                   # 원의 테투리색NA= "도시 연비"비",                                           # x축 라벨라벨
        ylab = "고속도로 연비"비",                                       # y축 라벨라벨
        main = "mpg 데이터의 도시 연비와 고속도로 연비에 따른 배기량")배기# 제목 # 제목


5-2. 함수 geom_point()

# iris 데이터ggplot(iris, aes(x = Sepal.Length,                                         # x축                 y = Sepal.Width,                                          # y축                 size = Petal.Length)) +                                   # 크기
  geom_point(color = "grey50",                                             # 색깔
             alpha = 0.5,                                                  # 색깔의 투명도             show.legend = FALSE) +                                        
  labs(x = "꽃받침의 길이"                                               # # x축 라벨NA= "꽃받침의 너비"                                                ## y축 라벨       title = "iris 데이터의 꽃받침의 길이와 너비에 따른 꽃잎의 길이") +NA# 제목NAtheme_bw() +                                                             # 배경
  theme(plot.title = element_text(hjust = 0.5, size = 15))
# mpg 데이터ggplot(mpg, aes(x = cty,                                                   # x축                y = hwy,                                                   # y축                size = displ,                                              # 크기
                color = displ)) +                                          # 색깔
  geom_point(show.legend = FALSE) +          
  scale_color_gradientn(colors = c("#00AFBB",                              # 수치가 작을 때 색깔                             
                                   "#E7B800",                              # 중간 색깔
                                   "#FC4E07")) +                           # 수치가 클 때 색깔색깔
  labs(x = "도시 연비"비",                                                  # x축 라벨라벨
       y = "고속도로 연비"비",                                              # y축 라벨라벨
       title = "mpg 데이터의 도시 연비와 고속도로 연비에 따른 배기량")+량")# 제목 # 제목
  theme_bw() +                                                             # 배경
  theme(plot.title = element_text(hjust = 0.5, size = 15))


5-3. 함수 plot_ly()

pacman::p_load("plotly")

# iris 데이터plot_ly(iris, 
        x = ~Sepal.Length,                                                      # x축        y = ~Sepal.Width,                                                       # y축        text = ~Petal.Length,                                                   # 글자        type = "scatter",                                                       # 산점도도
        mode = "markers",
        marker = list(size = ~Petal.Length,                                     # 크기
                      opacity = 0.5,                                            # 색깔 투명도
                      color = 'rgb(255, 65, 54)')) %>%                          # 색깔            
        layout(title = "iris 데이터의 꽃받침의 길이와 너비에 따른 꽃잎의 길이"NA#제목NA= list(title = "꽃받침의 길이")                          # # x축 라벨NA= list(title = "꽃받침의 너비"))                          ## y축 라벨
# mpg 데이터plot_ly(mpg, 
        x = ~cty,                                                           # x축        y = ~hwy,                                                           # y축        color = ~displ,                                                     # 색깔
        hoverinfo = 'text',
        text =  ~paste('도시 연비 :':'ctyty'고속도로 연비 :'비 :',           # 글자 글자
                       hwy, '<br>: 배기량'',displ)),                                               
        type = "scatter",                                                   # 산점도도
        mode = "markers",
        marker = list(size = ~displ,                                        # 크기
                      opacity = 0.5)) %>%                                   # 색깔 투명도
  layout(title = "mpg 데이터의 도시 연비와 고속도로 연비에 따른 배기량" 배기량"# 제목 # 제목
         xaxis = list(title = "도시 연비")"),                               # x축 라벨라벨
         yaxis = list(title = "고속도로 연비"))))                           # y축 라벨라벨

6. 평행좌표 그래프


6-1. 함수 parcoord()

pacman::p_load("MASS")

op <- palette(rainbow(nrow(mpg)))                                       # 색깔

# iris 데이터parcoord(iris[,1:4], 
         col = op,                   # 색깔
         var.label = TRUE)           # 각 변수들의 선 끝에 최댓값과 최솟값 출력 출력
# mpg 데이터parcoord(mpg[,c("displ", "cty", "hwy")], 
         col = op,                   # 색깔
         lty = 2,                    # 선 종류류
         var.label = FALSE)


6-2. 함수 parallelplot()

pacman::p_load("lattice")

# iris 데이터parallelplot(iris[,1:4],
             horizontal.axis = FALSE)           # 평행 축을 수평으로 나열할 것인지 여부NA
# mpg 데이터parallelplot(mpg[,c("displ", "cty", "hwy")],
             horizontal.axis = FALSE)           # 평행 축을 수평으로 나열할 것인지 여부NA


6-3. 함수 ggparcoord()

pacman::p_load("GGally")

# iris 데이터ggparcoord(iris, 
           columns = 1:4,                                              # 변수수
           groupColumn = 5,                                            # 그룹변수수
           scale = "globalminmax",                                     # 관측값 스케일링 X
           showPoints = TRUE,                                          # 점 표시 
           title = "iris 데이터의 붓꽃 종류에 따른 평행 좌표 그래프"# 제# 제목NA) +
  scale_color_brewer(palette = "Set2") +  # 색깔
  theme_bw() +                            # 배경
  theme(
    plot.title = element_text(size=10, hjust = 0.5)
  )
pacman::p_load("GGally",
               "viridis",                                               # For scale_color_viridis()
               "hrbrthemes")                                            # For theme_ipsum()

# mpg 데이터ggparcoord(mpg, 
           columns = c(3, 8, 9),                                        # 변수수
           groupColumn = "fl",                                          # 그룹변수수
           order = c(8, 9, 3),                                          # 변수 나열하는 순서 순서
           scale = "globalminmax",                                      # 관측값 스케일링 X
           showPoints = TRUE,                                           # 점 표시
           title = "mpg 데이터의 실린더 개수에 따른 평행 좌표 그래프"  ## 제목           ) +
  scale_color_viridis(discrete=TRUE) +                                  # 색깔
  theme_ipsum() +                                                       # 배경
  theme(
    plot.title = element_text(size=10, hjust = 0.5)
  )


7. 체르노프 얼굴그림

pacman::p_load("aplpack")

# iris 데이터faces(iris[,1:4],                                # 수치형 변수
      face.type = 0,                             # 얼굴 스타일(0 : 선만 있는 얼굴 /  1: 색칠된 얼굴 / 2 : 산타클로스 얼굴)로스 얼굴)
      nrow.plot = 3,                             # 행 개수
      main = "iris 데이터의 체르노프 얼굴그림")  # 제목

effect of variables:
 modified item       Var           
 "height of face   " "Sepal.Length"
 "width of face    " "Sepal.Width" 
 "structure of face" "Petal.Length"
 "height of mouth  " "Petal.Width" 
 "width of mouth   " "Sepal.Length"
 "smiling          " "Sepal.Width" 
 "height of eyes   " "Petal.Length"
 "width of eyes    " "Petal.Width" 
 "height of hair   " "Sepal.Length"
 "width of hair   "  "Sepal.Width" 
 "style of hair   "  "Petal.Length"
 "height of nose  "  "Petal.Width" 
 "width of nose   "  "Sepal.Length"
 "width of ear    "  "Sepal.Width" 
 "height of ear   "  "Petal.Length"
# mpg 데이터faces(mpg[,c("cyl", "displ", "cty", "hwy")],     # 수치형 변수
      face.type = 2,                             # 얼굴 스타일(0 : 선만 있는 얼굴 /  1: 색칠된 얼굴 / 2 : 산타클로스 얼굴)로스 얼굴)
      nrow.plot = 3,                             # 행 개수
      labels = rownames(mpg),                    # 얼굴 그림의 라벨라벨
      cex = 2,                                   # 라벨 크기기
      main = "mpg 데이터의 체르노프 얼굴 그림"
)

effect of variables:
 modified item       Var    
 "height of face   " "cyl"  
 "width of face    " "displ"
 "structure of face" "cty"  
 "height of mouth  " "hwy"  
 "width of mouth   " "cyl"  
 "smiling          " "displ"
 "height of eyes   " "cty"  
 "width of eyes    " "hwy"  
 "height of hair   " "cyl"  
 "width of hair   "  "displ"
 "style of hair   "  "cty"  
 "height of nose  "  "hwy"  
 "width of nose   "  "cyl"  
 "width of ear    "  "displ"
 "height of ear   "  "cty"  

Caution! 함수 plot.face()를 통해 체르노프 얼굴그림으로 산점도를 작성할 수 있다.

# iris 데이터## 체르노프 얼굴그림그림
iris.face <- faces(iris[1:10, 1:4], 
                   plot = FALSE)    # 그래프 출력 여부                  
effect of variables:
 modified item       Var           
 "height of face   " "Sepal.Length"
 "width of face    " "Sepal.Width" 
 "structure of face" "Petal.Length"
 "height of mouth  " "Petal.Width" 
 "width of mouth   " "Sepal.Length"
 "smiling          " "Sepal.Width" 
 "height of eyes   " "Petal.Length"
 "width of eyes    " "Petal.Width" 
 "height of hair   " "Sepal.Length"
 "width of hair   "  "Sepal.Width" 
 "style of hair   "  "Petal.Length"
 "height of nose  "  "Petal.Width" 
 "width of nose   "  "Sepal.Length"
 "width of ear    "  "Sepal.Width" 
 "height of ear   "  "Petal.Length"
## 산점도plot(iris$Sepal.Length[1:10],        # x축      iris$Sepal.Width[1:10],         # y축     xlab = "꽃받침의 길이"        # # x축 라벨NA= "꽃받침의 너비"         ## y축 라벨     main = "iris 데이터의 산점도") ## 제목
## 그린 산점도와 저장한 체르노프 얼굴 그림 오버랩버랩
plot.faces(iris.face,                # 얼굴 그림그림
           iris$Sepal.Length[1:10],  # x축           iris$Sepal.Width[1:10],   # y축           face.type = 1,            # 얼굴 스타일(0 : 선만 있는 얼굴 /  1: 색칠된 얼굴 / 2 : 산타클로스 얼굴) 스 얼굴) 
           width = 0.1,              # 얼굴 넓이
           height = 0.1)             # 얼굴 높이
# mpg 데이터mpg.face <- faces(mpg[1:15,c("cyl", "displ", "cty", "hwy")], 
                  plot = FALSE)    # 그래프 출력 여부  
effect of variables:
 modified item       Var    
 "height of face   " "cyl"  
 "width of face    " "displ"
 "structure of face" "cty"  
 "height of mouth  " "hwy"  
 "width of mouth   " "cyl"  
 "smiling          " "displ"
 "height of eyes   " "cty"  
 "width of eyes    " "hwy"  
 "height of hair   " "cyl"  
 "width of hair   "  "displ"
 "style of hair   "  "cty"  
 "height of nose  "  "hwy"  
 "width of nose   "  "cyl"  
 "width of ear    "  "displ"
 "height of ear   "  "cty"  
# 산점도plot(mpg$displ[1:15],                # x축      mpg$cty[1:15],                  # y축     xlab = "배기량"",               # x축 라벨벨
     ylab = "도시 연비"비",           # y축 라벨라벨
     main = "mpg 데이터의 산점도")  ## 제목
## 그린 산점도와 저장한 체르노프 얼굴 그림 오버랩버랩
plot.faces(mpg.face,                 # 얼굴 그림그림
           mpg$displ[1:15],          # x축           mpg$cty[1:15],            # y축           face.type = 2,            # 얼굴 스타일(0 : 선만 있는 얼굴 /  1: 색칠된 얼굴 / 2 : 산타클로스 얼굴)   얼굴)  
           width = 0.2,              # 얼굴 넓이
           height = 0.3)             # 얼굴 높이


8. 모자이크 그림

table <- table(mpg$fl, mpg$class)
table
   
    2seater compact midsize minivan pickup subcompact suv
  c       0       0       0       0      0          1   0
  d       0       1       0       0      0          2   2
  e       0       0       0       1      3          0   4
  p       5      21      15       0      0          3   8
  r       0      25      26      10     30         29  48
op <- palette(rainbow(5))

mosaicplot(table,                                                 # 분할표           main = "mpg 데이터의 연료 종류에 따른 자동차 종류",    # 제목
           xlab = "연료 종류"",                                   # x축 라벨벨
           ylab = "자동차 종류"                                  ## y축 라벨           color = c("orange", "yellow", "blue", "red", "green")  # 색깔    
)

Reuse

Text and figures are licensed under Creative Commons Attribution CC BY 4.0. The figures that have been reused from other sources don't fall under this license and can be recognized by a note in their caption: "Figure from ...".