Eco Life & Bioteco

biology and technology in MY LIFE

공부/R & Python

[R]ggplot2를 이용해서 히스토그램(histogram) 그리기

bioteco 2022. 2. 24. 15:52

이번 포스팅에서는

R에서 히스토그램(histogram)을 그리는 방법에 대해

이야기하고자 한다.

 

#ggplot2와 readxl이 없는 사람만 수행
install.packages("ggplot2")
install.packages("readxl")

#ggplot2와 readxl 불러오기
library(ggplot2)
library(readxl)

먼저 install.packges()를 통해 ggplot2와 readxl을 다운받아주고

library()를 통해 각 패키지를 불러와 준다.

ggplot2의 경우 R을 하시는 분들이라면 많이 들어보시고, 사용하시는

패키지이며, 정말 많은 분들이 소개하고 작성해 놓은 글들이 많다.

자신에게 맞은 스타일을 정리해 놓는 것이 포인트라고 생각한다.

 

 

#테마를 지정(많은 스타일이 있으므로 본인에게 맞는 설정을 하자)
theme_set(theme_bw() + 
    theme(legend.position = "top")) #legend.position은 범례가 있을 경우 작성

ggplot2의 강점을 살려 테마를 지정하고, 수정 및 변경을 할 수 있다.

테마의 종류는 여러개가 있으므로

자신에게 필요한, 맞은 테마를 지정해서 설정해주면 된다.

 

 

 

lgend.position의 경우 범례가 있을 경우에만 지정해주면 되고,

범례가 없을 경우에는 그냥 작성해주면 표시되지 않는다.

 

 

#read_xlsx를 통해 엑셀파일을 불러온다.
#sheet = 는 몇번째 sheet에 있는 정보를 불러올 것인지 지정하는 것으로
#시트가 1개만 있다면 작성하지 않아도 됨
w = read_xlsx(path = "c:/korea_total.xlsx", sheet = 4)

#엑셀 파일을 불러온 변수 w에서 x축에 pc라는 변수를 지정
a <- ggplot(w, aes(x = pc))

필자는 c:/ 경로를 통해 엑셀파일을 불러왔지만,

이 글을 보시는 분들은 파일이 있는 경로로 지정해주면 된다.

개인적으로 c:/ 에 놓는 것이 편해서 자주 이용하는 편이다.

 

 

a + geom_histogram(aes(y = stat(density)),
                   colour = "black", fill = "#EA813D", bins = 50) + 
  geom_density(alpha = 0.3, size = 0.8, fill = "#FFE641") + xlab("Altitude (m)") +
  theme(axis.title.x = element_text(face = "plain",
                                    size = 15,
                                    hjust = 0.5,
                                    color = "black"),
        axis.title.y = element_text(face = "plain",
                                    size = 15,
                                    hjust = 0.5,
                                    color = "black"),
        axis.text.y = element_text(size = 12, 
                                   color = "black", 
                                   angle = 0), 
        axis.text.x = element_text(size = 12, 
                                   color = "black", 
                                   angle = 0))

gglot2를 통해 히스토그램 그래프를 그리는 방법의 마지막 단계이다.

복잡해보이지만, 하나하나 살펴보자

이부분은 조금씩 잘라서 보면...

 

 

a + geom_histogram(aes(y = stat(density)),
                   colour = "black", fill = "#EA813D", bins = 50) +
#colour는 히스토그램 막대의 외각선 색상
#fill은 막대 안의 색상을 어떤 색으로 할 것인지 지정
#bins = 는 히스토그램의 개수이며 binwidth = 에 의해 재설정 된다고 함

위의 코드를 입력한 결과 나타난 그래프

외각선이 검은색이고, fill을 통해 채운 색상은

주황색인 것을 확인할 수 있다.

색상은 google에 #색상유니코드 라고 검색하면

다양한 색상이 많이 나오니 참고하면 좋을 듯 하다.

 

 

#밀도곡선 그리기
geom_density(alpha = 0.2, size = 0.1, fill = "#FFE641") + xlab("Altitude (m)") +

alpha = 0.2, size = 0.1(좌)                                                                        alpha = 0.8, size = 0.8(우)

alpha = 는 밀도곡선 안쪽의 색상의 강도 조절

size = 는 밀도곡선의 선 굵기

를 변경 할 수 있다.

alpha와 size의 크기를 변경했을 경우 변화하는 모습을 비교하기 위해 2개의 그래프를 

그려보았다.

 

 

#x축과 y축에 대해 세부적인 설정을 하는 방법
theme(axis.title.x = element_text(face = "plain",
                                    size = 15,
                                    hjust = 0.5,
                                    color = "black"),
        axis.title.y = element_text(face = "plain",
                                    size = 15,
                                    hjust = 0.5,
                                    color = "black"),
        axis.text.y = element_text(size = 12, 
                                   color = "black", 
                                   angle = 0), 
        axis.text.x = element_text(size = 12, 
                                   color = "black", 
                                   angle = 0))

#face = 글씨체, 서체 지정
#size = 글씨 크기 조절
#hjust = 글씨 위치 변경(0.5가 중앙)
#color = 글씨 색상 지정
#angle = 글씨의 각도 지정

axis.title.x는 코드 그대로

x축 제목에 대한 세부수정을 하는 것이며,

axis.title.y는 y축 제목에 대한 세부수정을 하는 것이다.

axis.text.x는 x축 라벨에 대한 세부 사항을 수정할 수 있다.

필자가 작성한 그래프를 보면...

 

x축, y축 세부설정 전(좌)                                                                           x축, y축 세부설정 후(우)

x축과 y축에 대한 글씨크기, 글씨체 등을 변경하기 전과 후의 모습을 비교해보기 위해

2개의 그래프를 작성해보았다.

위의 그림처럼 세부설정을 통해 자신이 원하는 사항에 대한

수정을 할 수 있다.

 


 

전체 코드는 다음과 같다.

install.packages("ggplot2")
library(ggplot2)
library(readxl)

theme_set(theme_bw() + 
            theme(legend.position = "top"))

w = read_xlsx(path = "c:/korea_total.xlsx", sheet = 4)

a <- ggplot(w, aes(x = pc))

a + geom_histogram(aes(y = stat(density)),
                   colour = "black", fill = "#EA813D", bins = 50) +    
  geom_density(alpha = 0.2, size = 0.1, fill = "#FFE641") + xlab("Altitude (m)") +  
  theme(axis.title.x = element_text(face = "plain",
                                    size = 15,
                                    hjust = 0.5,
                                    color = "black"),
        axis.title.y = element_text(face = "plain",
                                    size = 15,
                                    hjust = 0.5,
                                    color = "black"),
        axis.text.y = element_text(size = 12, 
                                   color = "black", 
                                   angle = 0), 
        axis.text.x = element_text(size = 12, 
                                   color = "black", 
                                   angle = 0))

 

 

 

 

오늘도 누군가에 도움이 되었길 바라며...