한의대 생활/└ R studio 시각화

5. [] barplot with error bar []

2019. 1. 15. 23:18

R mark down으로 작성



bar plot with error bar

bar plot

par(mfrow = c(1,1))
barplot(c(1, 2, 3, 4)) # y값만 입력한 경우

barplot(c(1, 2, 3, 4), names.arg = c("A", "B", "C", "D")) # y값과 x축이름을 지정한 경우

데이터 가져와서, 각 칼럼들의 기준별 통계구하기

attach(iris)

head(iris)
str(iris)
## 'data.frame':    150 obs. of  5 variables:
##  $ Sepal.Length: num  5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
##  $ Sepal.Width : num  3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
##  $ Petal.Length: num  1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
##  $ Petal.Width : num  0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
##  $ Species     : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...
# bar의 높이(y값)으로 쓰일 각 칼럼의 <종별>  평균 계산하기
# aggregate( 통계구할 칼럼, 기준칼럼(list(col1, col2), 통계함수)
# -> 종을 기준으로 4개의 칼럼의 평균값 구하기
iris.mean <- aggregate(iris[, 1:4], iris["Species"], mean)
iris.mean
# bar의 error bar로 쓰일 각 칼럼 <종별> 표준편차 구하기
iris.sd <- aggregate(iris[,1:4], iris["Species"], sd)
iris.sd

표준편차와 평균df를 가지고, error bar의 위쪽, 아래쪽 좌표 계산해놓기

# df + aggregate로 구한 표준편차 df는 첫칼럼이 기준(종별)이다.
iris.sd 
# 기준칼럼 말고, 수치가 있는 [,2:5]칼럼만 가져와서
# error bar의 위쪽값과 아래쪽값을 구하자.
iris.sd.upper <- iris.mean[, 2:5] + iris.sd[, 2:5]
iris.sd.lower <- iris.mean[, 2:5] - iris.sd[, 2:5]

iris.sd.upper
iris.mean[, 2:5]
iris.sd.lower

평균을 좌표로 만들어서 barplot을 먼저 그려놓서 객체에 넣어두기(화살표의 기준점)

barplot( as.matrix(iris.mean[,2:5]), 
                   col=c("red", "blue", "purple"))

# beside = TRUE 를 넣어주면, 좌표로 그린 df의 row별로 
# barplot이 옆으로 그려지고, 
# beside = FALSE는 stacked로 그려진다.
barplot( as.matrix(iris.mean[,2:5]), 
         beside = TRUE,
         col=c("red", "blue", "purple"))

b <-barplot( as.matrix(iris.mean[,2:5]), 
         beside = TRUE,
         col=c("red", "blue", "purple"),
         ylim=c(0,8))

barplot을 그린 객체를 arrow()의 첫번째인자-화살표가 나가는 기준 으로 넣어서, barplot+arrow 동시에 그리기

# arrows는 이미 그려진곳에 그리는 것 같다. 안 그려놓으면 knit시 오류난다.
barplot( as.matrix(iris.mean[,2:5]), 
         beside = TRUE,
         col=c("red", "blue", "purple"),
         ylim=c(0,8))
arrows(b, as.matrix(iris.sd.upper), #기준, 화살표 끝의 좌표
      b, as.matrix(iris.sd.lower), #기준, 화살표 끝의 좌표
      angle = 90,                  # 몸통에서 나가는 화살표촉의 각도
      length = 0.05,               # 화살표 촉의 길이
      code = 3)                    # 화살표의 갯수 : 1시작점에 화살표 2끝점에 화살표 3 양쪽에 화살표