지난번 포스팅에서는 그래프에 추가적인 정보를 입력하는 낮은 수준의 그래프 함수(low level graphic functions) 중에서 첫번째로 제목, XY축 Label 추가하는 title()에 대해서 알아보았습니다.


이번 포스팅에서는 낮은 수준의 그래프 함수 두번째로 (2) XY축 형태 변환 : axis(side, ...) 에 대해서 소개하겠습니다.



[ 낮은 수준의 그래프 함수 (Low level graphic function) ]





XY축 형태를 변경하는 axis() 함수의 기본 사용법은 아래와 같습니다.


axaxis(side, at = NULL, labels = TRUE, tick = TRUE, line = NA,
     pos = NA, outer = FALSE, font = NA, lty = "solid",
     lwd = 1, lwd.ticks = lwd, col = NULL, col.ticks = NULL,
     hadj = NA, padj = NA, ...)




위의 axis() 함수의 모수 중엣서 사용빈도가 높은 주요 모수에 대해서 기능 설명과 예를 들어보겠습니다.  


 arguments

description 

 side

그래프의 어느 쪽에 축을 그릴지 지정하는 정수

(an integer specifying which side of the plot the axis is to be drawn on)

    1 = 아래쪽 (below side)
    2 = 왼쪽 (left side)
    3 = 위쪽 (above side)
    4 = 오른쪽 (right side)

 at

축의 눈금이 그려질 곳의 위치를 지정하는 점들 

(the points at which tick-marks are to be drawn)

 labels

축 눈금에 라벨 데이터를 입력하는 숫자형 벡터, 혹은 문자형 벡터

(numerical or a character or expression vector of labels to be placed at the tick-points) 

 tick

축의 눈금과 축의 선을 그릴지를 설정하는 논리형 값

(a logical value specifying whether tickmarks and an axis line should be drawn) 

 pos

해당 축이 다른 축과 교차하는 좌표

(the coordinate at which the axis line is to be drawn) 

lty 

축과 눈금의 선의 유형

(line type for both the axis line and the tick marks) 

lwd

축의 눈금의 선의 두께

(line widths for the axis line and the tick marks) 

 col

축과 눈금 선의 색깔

(colors for the axis line and the tick marks respectively) 

 tck

 눈금의 방향과 길이 설정

(direction and length of tick marks)

    - 양수 : 그래프 안쪽으로 눈금 생성

    - 음수 : 그래프 바깥쪽으로 눈금 생성

 hadj

 수평 라벨에 대한 수정

(adjustment for all labels parallel (‘horizontal’) to the reading direction)

 padj

 수직 라벨에 대한 수정
(adjustment for each tick label perpendicular to the reading direction)




X축과 Y축을 변경하려면 먼저 "axes = FALSE" 옵션을 사용해서 X축과 Y축을 제거해야 합니다.  X축만 선별적으로 제거하려면 xaxt = "n", Y축만 선별적으로 제거하려면 yaxt = "n" 옵션을 사용하면 되겠습니다.  아래에 각각의 예를 들어보았습니다.


> ##---------------------------------------------
> ## low level graphic functions : axis(side, ...)
> ##---------------------------------------------
> 
> library(MASS) # to use Cars93 dataframe
> 
> # Save default par values
> op <- par(no.readonly = TRUE)
> 
> # Change par() function options
> par(mfrow=c(2, 2)) # make frame by 2 row, 2 columns 
>     
> 
> # plot with X and Y axis
> plot(MPG.highway ~ Weight, Cars93,
+      main = "plot with X and Y axis")
> 
> # deleting X and Y axes : axes = FALSE
> plot(MPG.highway ~ Weight, Cars93, axes = FALSE, 
+      main = "axes = FALSE") 
> 
> 
> # deleting X axis : xaxt = "n"
> plot(MPG.highway ~ Weight, Cars93, xaxt = "n", 
+      main = "xaxt = n") 
> 
> 
> # deleting Y axis : yaxt = "n"
> plot(MPG.highway ~ Weight, Cars93, yaxt = "n", 
+      main = "yaxt = n") 
> 
> 
> # Reset par to the default values at startup
> par(op)



 




X축과 Y축의 범위를 알아보기 위해 summary() 함수로 기술통계량을 알아보겠습니다.


> # summary statistics
> 
> summary(Cars93$Weight) # X axis
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
   1695    2620    3040    3073    3525    4105 
> 
> summary(Cars93$MPG.highway) # Y axis
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  20.00   26.00   28.00   29.09   31.00   50.00




X축으로 Weight (차의 무게)를, Y축으로는 MPG.highway (고속도로 연비)으로 하는 산점도를 그린다고 했을 때, X축은 1600~4200까지의 범위로 100씩 증가하는 눈금을, Y축은 18~52까지의 범위로 2씩 증가하는 눈금으로 그려보겠습니다.


> # X axis (1600 ~ 4200, by 100)
> # Y axis (18 ~ 52 range, by 2)
> plot(MPG.highway ~ Weight, Cars93, axes = FALSE, 
+      xlim = c(1600, 4200),
+      ylim = c(18, 52), 
+      main = "scatter plot of Weight and MPG.highway") 
> 
> x <- seq(1600, 4200, by = 100)
> y <- seq(18, 52, by = 2)
> 
> 
> axis(side = 1, # bottom side
+      at = x, 
+      labels = TRUE, 
+      pos = 18, # coordinate of X axis starting point
+      tck = 0.02) # tick marks at vertical direction with 0.02 length
> 
> axis(side = 2, # left side
+      at = y, 
+      labels = TRUE, 
+      pos = 1600, # coordinate of Y axis starting point
+      tck = -0.02) # tick marks at horizontal direction with 0.02 length






다음번 포스팅에서는 직선 연결, 직선 추가하는 낮은 수준은 그래프 함수 lines(), abline() 에 대해서 알아보도록 하겠습니다.


많은 도움 되었기를 바랍니다.

 

이번 포스팅이 도움이 되었다면 아래의 '공감 ~♡' 단추를 꾸욱 눌러주세요.^^

 

728x90
반응형
Posted by Rfriend
,