본문 바로가기
R 프로그래밍/R basic

[R 그래픽스]정당별 국회의원 의석 수 그래프로 표현하기

by 찐남 2021. 12. 19.

오늘은 대한민국 정당별 국회의원 의석 수를

그래프로 표현하는 방법에 대해서
알아보도록 할게요.

 

최종 표현된 그래프의 모습은 아래와 같아요.

 

 

 


 

자! 그러면 지금부터 그래프를 그려 보도록 하겠습니다.

위와 같은 그래프를 그리려면 우선 "ggpol"이라는 R 패키지가 필요하기 때문에,
우선, 패키지를 설치하고, 로딩할게요.

 

install.packages("ggpol") # ggpol 패키지 설치
library(ggpol) # ggplo 패키지 로딩

 

다음에는 정당별 의석 수를 나타내는
데이터 프레임을 생성할게요.

(참고로, 「국회법」제33조 제2항 및 제3항에 따른 보고 기준,
2022년 03월 11일 현재 기준의 정당별 의석 수입니다.)

 

df <- data.frame(
________party = c('무소속', '시대전환', '기본소득당', '국민의당', '정의당', '국민의힘', '더불어민주당'),
________seats = c(6, 1, 1, 3, 6, 110, 172)
)

df # 정당별 의석 수 데이터 프레임 확인

정당별 의석 수

 

나중에 그래프의 범례로 활용하기 위해서 범례로 활용하기 위한 변수(legned)를 생성할게요.

 

df$legend <- paste0(df$party," (", df$seats,")")
df # 데이터 확인

정당별 의석 수를 나타내는 데이터프레임&nbsp; &nbsp;(legend가 추가됨을 확인)

 

다음은 정당별 색상을 나타내기 위한 R코드입니다.

 

colors = c("grey", "green","purple", "lightblue", "yellow", "red", "blue")

 

가장 기본적인 R코드는 딱! 두 줄이에요.

ggplot(df) +
geom_parliament(aes(seats =seats, fill = party))

 




처음에 보여드린 그림과 유사한데, 뭔가 세련되고,
예뻐 보이지 않죠?
그래프를 조금 예쁘게,
그리고 설명도 추가해서 꾸며보도록 할게요.
우선, 정당 수를 나타내는 원의 테두리를
하얀색으로 변경할게요.

 

ggplot(df) +
geom_parliament(aes(seats =seats, fill = party), color = "white")

의석 수를 나타내는 원의 색깔을 변경하고,
범례도 추가할게요.

ggplot(df) +
geom_parliament(aes(seats =seats, fill = party), color = "white") +
scale_fill_manual(values = colors , labels = df$legend)

x, y 축의 비율을 고정하고,
그래프 테마를 꾸미기 위한 기본 세팅을 할게요.

 

ggplot(df) +
geom_parliament(aes(seats =seats, fill = party), color = "white") +
scale_fill_manual(values = colors , labels = df$legend) +
coord_fixed() +
theme_void()

그래프의 설명을 추가해 볼게요.

ggplot(df) +
geom_parliament(aes(seats =seats, fill = party), color = "white") +
scale_fill_manual(values = colors , labels = df$legend) +
coord_fixed() +
theme_void() +
labs(title = "대한민국 정당별 국회의원 의석 수",
_____caption = "「국회법」제33조 제2항 및 제3항에 따른 보고 기준, 2022년 03월 11일 현재")

 

 



설명은 추가되었는데, 위치와 크기가 맘에 안 드네요.
테마(theme)를 활용해서 일단, 예쁘게 꾸며 볼게요.

 

ggplot(df) +
geom_parliament(aes(seats =seats, fill = party), color = "white") +
scale_fill_manual(values = colors , labels = df$legend) +
coord_fixed() +
theme_void() +
labs(title = "대한민국 정당별 국회의원 의석 수",
_____caption = "「국회법」제33조 제2항 및 제3항에 따른 보고 기준, 2022년 03월 11일 현재") +
theme(title = element_text(size = 18), # 그래프 제목 크기 조정
________plot.title = element_text(hjust = 0.5), # 그래프 제목 위치 조정
________plot.caption = element_text(vjust = -3, hjust = 0.9), # 그래프 캡션 위치 조정
________legend.position = 'bottom', # 범례 위치 "아래로" 조정
________legend.direction = "horizontal", # 범례 방향 지정
________legend.spacing.y = unit(0.1,"cm"), # 범례 y축으로의 공간 지정
________legend.spacing.x = unit(0.1,"cm"), # 범례 x축으로의 공간 지정
________legend.key.size = unit(0.8, 'lines'), # 범례 표식 크기 조정
________legend.text = element_text(margin = margin(r = 1, unit = 'cm')), # 범례 설명 간 거리 조정
________legend.text.align = 0)

범례에 대한 가이드 및 그래프에 대한 주석 추가로
최종 마무리할게요.

ggplot(df) +
geom_parliament(aes(seats =seats, fill = party), color = "white") +
scale_fill_manual(values = colors , labels = df$legend) +
coord_fixed() +
theme_void() +
labs(title = "대한민국 정당별 국회의원 의석 수",
_____caption = "「국회법」제33조 제2항 및 제3항에 따른 보고 기준, 2022년 03월 11일 현재") +
theme(title = element_text(size = 18), # 그래프 제목 크기 조정
________plot.title = element_text(hjust = 0.5), # 그래프 제목 위치 조정
________plot.caption = element_text(vjust = -3, hjust = 0.9), # 그래프 캡션 위치 조정
________legend.position = 'bottom', # 범례 위치 "아래로" 조정
________legend.direction = "horizontal", # 범례 방향 지정
________legend.spacing.y = unit(0.1,"cm"), # 범례 y축으로의 공간 지정
________legend.spacing.x = unit(0.1,"cm"), # 범례 x축으로의 공간 지정
________legend.key.size = unit(0.8, 'lines'), # 범례 표식 크기 조정
________legend.text = element_text(margin = margin(r = 1, unit = 'cm')), # 범례 설명 간 거리 조정
________legend.text.align = 0) + 
guides(fill=guide_legend(nrow=3,byrow=TRUE,reverse = FALSE,title=NULL)) + # 범례에 대한 가이드 지정annotate("text", x = 0, y = 0.4, label = "총 의석수 : 299",colour = "black",size=6) # 그래프 주석 추가

 



반응형

댓글