논문 그래프 그리기를 할 때 자주 사용하는 그래프 5 종류에 해당하는 R 코드를 소개합니다. R은 논문 그래프 그리는 프로그램 중 고품질 그래프를 쉽게 만들 수 있는 무료 프로그램입니다. 이번 포스팅에서는 R ggpubr 패키지가 무엇인지 어떻게 사용하는지 알아봅시다.
논문에 많이 사용되는 그래프 종류
통계 논문에서 많이 사용되는 그래프 5가지 종류는 다음과 같습니다:
- 히스토그램 (Histogram): 연속적인 데이터를 구간별로 나누어 각 구간의 데이터 수를 막대로 표현한 그래프입니다. 데이터의 분포를 파악하기 좋습니다.
- 산점도 (Scatter Plot): 두 변수 간의 관계를 점으로 나타내는 그래프입니다. 변수 간의 상관 관계를 파악하는 데 유용합니다.
- 막대 그래프 (Bar Chart): 범주형 데이터의 빈도나 퍼센트를 막대로 표현한 그래프입니다. 각 범주의 크기를 비교하기 좋습니다.
- 선 그래프 (Line Chart): 시간의 흐름에 따른 연속적인 데이터의 변화를 선으로 표현한 그래프입니다. 시계열 데이터의 추세를 파악하는 데 유용합니다.
- 상자 수염 그래프 (Box Plot): 데이터의 중앙값, 사분위수, 이상치 등을 한 눈에 파악할 수 있는 그래프입니다. 데이터의 분포와 이상치를 확인하는 데 도움이 됩니다.
이 외에도 원 그래프 (Pie Chart), 지도 시각화, 히트맵 (Heatmap) 등 다양한 그래프와 시각화 방법이 있습니다. 특정 논문이나 연구 목적에 따라 적절한 그래프를 선택하여 사용합니다.
R ggpubr 패키지에 대하여
ggpubr
는 R에서 사용되는 패키지 중 하나로, ggplot2
를 기반으로 한 고급 그래프를 쉽게 생성할 수 있도록 도와주는 패키지입니다. ggpubr
는 특히 과학 연구와 통계 분석에 사용되는 그래프를 빠르게 그릴 수 있도록 다양한 함수를 제공합니다.
ggplot2
의 복잡한 문법 없이도 풍부한 그래픽 옵션을 제공합니다.- 여러 개의
ggplot
그래프를 쉽게 배열하거나 합칠 수 있는 기능이 있습니다. - 통계적 검정 결과를 그래프 위에 직접 표시하는 기능을 제공합니다.
- 다양한 유형의 그래프를 쉽게 그릴 수 있는 함수를 포함하고 있습니다.
설치하기 및 예제 불러오기
다음과 같은 코드를 사용하여 ggpubr
패키지 설치 후 패키지를 불러오도록 하겠습니다.
# 패키지 설치 코드
# install.packages("ggpubr")
library(ggpubr)
이번 포스팅에서는 통영시 시립 박물관 방문자 데이터를 사용합니다. 위 링크를 통해 파일을 다운 받고 따라오세요! 만약 데이터 한글이 깨진다면 인코딩 정보를 확인 후 불러오시기 바랍니다.
city_museum <- read_csv("./data/city_museum2022.csv",
locale = locale(encoding = "UTF-8"))
>> Rows: 365 Columns: 11
>> ── Column specification ─────────────────────────────
>> Delimiter: ","
>> chr (1): 휴관일
>> dbl (8): 통영_합계, 타지역_합계, 성인_통영, 청소년_통영, 어린이_통영, 성...
>> date (2): 날짜, 데이터기준일자
>>
>> ℹ Use `spec()` to retrieve the full column specification for this data.
>> ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
그럼 논문에 자주쓰는 그래프 5종 코드 시작합니다.
자주 쓰이는 논문 그래프 그리기 5종류!
히스토그램 (Histogram)
히스토그램은 데이터의 분포와 중심 경향, 퍼짐, 왜곡, 뾰족함 등의 특성을 파악하기 위한 시각화 도구입니다. ’통영_합계’에 대한 히스토그램을 통해 해당 데이터의 전반적인 분포와 주요 특성을 파악할 수 있습니다.
gghistogram(
city_museum,
x = "통영_합계",
bins = 30,
fill = "blue",
color = "black",
alpha = 0.7
) +
ggtitle("통영 방문자 히스토그램",
subtitle = "관찰기간: 2022년 1월 ~ 12월") +
xlab("통영 방문자 수 (명)") +
ylab("빈도") +
theme(
plot.title = element_text(hjust = 0.5, face = "plain"),
plot.subtitle = element_text(hjust = 0.5, face = "italic")
)
x
: 히스토그램을 그릴 변수입니다. 여기서는 ’통영_합계’를 사용하였습니다.bins
: 데이터를 나눌 구간의 수를 지정합니다. 더 많은 구간을 사용하면 더 세부적인 분포를 볼 수 있지만, 너무 많은 구간은 데이터를 이해하기 어려울 수 있습니다.fill
: 막대의 내부 색상을 지정합니다.color
: 막대의 테두리 색상을 지정합니다.alpha
: 막대의 투명도를 지정합니다. 1에 가까울수록 불투명하며, 0에 가까울수록 투명합니다.
이 히스토그램은 통영의 방문자 수와 그 빈도를 보여줍니다. 이를 통해 통영에 얼마나 많은 사람들이 방문하는지, 그리고 그 방문자 수의 분포가 어떠한지 한 눈에 파악할 수 있습니다.
산점도 (Scatter Plot)
산점도는 두 변수 간의 관계를 점으로 표현하는 그래프입니다. 이를 통해 두 변수 사이의 연관성, 관계의 방향성 (양의 관계나 음의 관계), 그리고 이상치의 존재 여부 등을 파악할 수 있습니다.
여기서의 산점도는 ‘통영_합계’와 ’타지역_합계’ 간의 관계를 나타냅니다. 각 점은 하나의 날짜에 대한 통영과 타지역의 방문자 수를 나타냅니다.
ggscatter(
city_museum,
x = "통영_합계",
y = "타지역_합계",
color = "blue",
alpha = 0.5,
add = "reg.line"
) +
ggtitle("통영 방문자와 타지역 방문자 산점도") +
xlab("통영 방문자 수 (단위: 명)") +
ylab("타지역 방문자 수 (단위: 명)")
- 회귀선 (Regression Line):
add = "reg.line"
옵션을 사용하여 데이터의 전반적인 추세를 보여주는 회귀선을 그릴 수 있습니다. 회귀선은 두 변수 간의 관계의 경향성을 나타냅니다. 만약 회귀선이 왼쪽 아래에서 오른쪽 위로 올라가면 두 변수는 양의 상관관계를 가지며, 반대 방향이면 음의 상관관계를 가집니다.
이 산점도를 통해 통영 방문자 수가 증가할 때 타지역 방문자 수가 어떻게 변하는지, 또는 그 반대의 경우는 어떠한지 파악할 수 있습니다. 또한, 특정 날짜에 통영 또는 타지역 방문자 수가 예상보다 많거나 적은 경우, 그 원인을 파악하는 데 도움을 줄 수 있습니다.
막대 그래프 (Bar Chart)
막대 그래프는 데이터의 각 범주의 크기나 빈도를 나타내는 데 효과적인 시각화 도구입니다. 각 범주의 값이 어느 정도인지, 어떤 범주가 가장 크거나 작은지 한 눈에 파악하기 쉽습니다.
여기서의 막대 그래프는 ‘성인’, ‘청소년’, ’어린이’라는 세 가지 범주에 따른 통영시의 연간 총 방문자 수를 표현하기 위해 ggbarplot
함수를 사용합니다. 각 막대의 높이는 해당 범주의 방문자 수를 나타냅니다.
library(dplyr)
group_sum <- city_museum |>
select(성인_통영, 청소년_통영, 어린이_통영) |>
summarise(
성인_통영 = sum(성인_통영, na.rm = TRUE),
청소년_통영 = sum(청소년_통영, na.rm = TRUE),
어린이_통영 = sum(어린이_통영, na.rm = TRUE)
) |>
pivot_longer(cols = everything(),
names_to = "group",
values_to = "value") |>
mutate(group = c("성인", "청소년", "어린이"))
ggbarplot(
group_sum,
x = "group",
y = "value",
fill = "group",
color = "black",
palette = "jco"
) +
ggtitle("통영시 성인, 청소년, 어린이 연간 총 방문자 수") +
xlab("방문자 카테고리") +
ylab("총 방문자 수") +
labs(fill = "방문자 유형")
fill
: 막대의 내부 색상을 지정합니다.color
옵션은 막대의 테두리 색상을 지정합니다.palette
옵션으로는 색상 팔레트를 지정할 수 있어, 여러 범주가 있을 때 각각 다른 색상을 사용하여 구분하기 쉽게 만듭니다.
선 그래프 (Line chart)
선 그래프는 시간의 흐름에 따른 연속적인 데이터의 변화를 표현하기 위해 사용됩니다. ’통영_합계’의 시간에 따른 변화를 ggline 함수를 사용하여 표현합니다. x축은 날짜를, y축은 해당 날짜의 통영 방문자 수를 나타냅니다.
ggline(city_museum,
x = "날짜",
y = "통영_합계",
color = "blue") +
ggtitle("통영 방문자 수의 1년간 변화") +
xlab("날짜") +
ylab("통영 방문자 수") +
scale_x_date(labels = scales::date_format("%y년 %m월")) +
mytheme()
color
: 선의 색상을 지정할 수 있습니다.- 시간 축:
scale_x_date()
함수를 사용하여 x축의 날짜 형식을 지정합니다. 여기서는 연도와 월을 표시하는 형식으로 설정되었습니다.
선 그래프를 통해 통영 방문자 수가 1년 동안 어떻게 변화했는지를 쉽게 파악할 수 있습니다. 특정 시기에 방문자 수가 급증하거나 감소한 경우, 그 원인을 추측하거나 분석하는 데 도움이 됩니다. 또한, 주기적인 패턴이나 계절적인 변동 등의 특성을 파악하는 데도 선 그래프는 유용합니다.
상자 수염 그래프 (Box plot)
상자 수염 그래프는 데이터의 분포와 중심 경향, 이상치를 시각적으로 나타내는 그래프입니다. ’통영_합계’와 ’타지역_합계’의 분포를 ggboxplot 함수를 사용하여 표현합니다.
box_data <- city_museum |>
select(통영_합계, 타지역_합계) |>
pivot_longer(cols = everything(),
names_to = "category",
values_to = "value")
# 상자 수염 그래프 그리기
ggboxplot(box_data,
x = "category",
y = "log(value)",
color = "category",
palette = "jco") +
ggtitle("통영 및 타지역 방문자 수의 상자 수염 그래프") +
xlab("방문자 유형") +
ylab("방문자 수 (로그 변환)") +
scale_x_discrete(labels = c(
"통영_합계" = "통영",
"타지역_합계" = "타지역"
)) +
scale_color_manual(values = c("blue", "red"),
labels = c("통영", "타지역")) +
labs(color = "구분") +
mytheme()
- 상자: 상자는 데이터의 사분위 범위를 나타냅니다. 상자의 상단과 하단은 각각 3사분위(Q3)와 1사분위(Q1) 값을 나타내며, 상자의 내부 선은 중앙값(median)을 표현합니다.
- 수염: 수염은 데이터의 범위를 나타냅니다. 일반적으로 데이터의 최대값과 최소값을 나타내지만, 이상치가 있는 경우 이상치를 제외한 범위를 나타냅니다.
- 이상치: 데이터에서 일반적인 범위를 벗어나는 값들을 이상치로 표시합니다.
이번 그래프에서는 ’통영_합계’와 ’타지역_합계’의 분포를 상자 수염 그래프로 나타냈습니다. 데이터의 범위가 큰 경우 로그 변환을 통해 데이터의 분포를 보다 명확하게 나타낼 수 있습니다.
상자 수염 그래프를 통해 통영 및 타지역의 방문자 수의 분포와 중앙값, 이상치 등을 쉽게 파악할 수 있습니다. 특히, 두 지역의 방문자 수 분포를 비교하여 어느 지역의 방문자 수가 더 일정한지, 어느 지역에 이상치가 더 많은지 등의 정보를 얻을 수 있습니다.
본 포스팅은 R 프로그래밍 기초 공략.zip 교재의 일부분 입니다. 본 교재는 R을 독학하시는 분들을 위하여 특별히 제작된 교재입니다. R을 이제 막 시작하셨다면 슬기로운 통계생활과 같이 공부해보세요!