프랑스 국기와 오륜기 색상코드 이용 시각화(feat. 2024 파리올림픽)
2024년 7월 26일부터 8월 11일 일정의 파리올림픽 기념으로 오륜기와 프랑스 국기 그리는 방법을 소개하려 합니다. 오륜기 색상코드는 #0057B8(Blue), #FFA300(Yellow), #000000(Black), #009B3A(Green), #EF3340(Red) 입니다. 이 색상코드를 이용하여 Life2.0 테리와 함께 R의 ggplot2 패키지를 통해 그려보시죠.
오륜기와 프랑스 국기
색상코드와 그 의미
프랑스 국기
프랑스 국기는 파란색(#002395), 하얀색(#FFFFFF), 빨간색(#ED2939) 세 가지 색으로 구성된 세로 줄무늬로 이루어져 있으며, “삼색기”라고도 불립니다. 각 색은 프랑스 혁명의 가치와 관련이 있습니다.
- 파란색은 자유를 상징합니다. 프랑스 혁명 당시의 파리 민병대의 색에서 유래되었으며, 자유와 민주주의를 대표합니다.
- 하얀색은 평등을 상징합니다. 이는 프랑스의 왕을 상징하는 색으로, 혁명 이후에는 모든 사람들의 평등을 의미하게 되었습니다.
- 빨간색은 박애를 상징합니다. 프랑스 혁명 때의 혁명군의 색에서 유래되었으며, 형제애와 국민 간의 연대를 의미합니다.
오륜기 색상코드 (올림픽기)
오륜기는 올림픽을 상징하는 기로, 하얀 바탕에 다섯 개의 서로 연결된 고리로 구성되어 있습니다. 이 고리들은 파란색, 노란색, 검은색, 초록색, 빨간색입니다. 오륜기는 전 세계의 스포츠맨십과 연대를 나타내며, 올림픽의 이념인 “더 빠르게, 더 높이, 더 강하게”를 반영합니다.
- 이 다섯 개의 고리는 다섯 개의 대륙을 상징합니다. 구체적으로는 아프리카, 아시아, 유럽, 아메리카, 오세아니아를 의미합니다.
- 고리의 색상은 각 대륙의 특정 색을 지칭하지 않으며, 모든 국가의 국기에 최소한 하나의 색상이 포함되어 있는 색을 선택한 것입니다. 즉, 파란색(#0057B8), 노란색(#FFA300), 검은색(#000000), 초록색(#009B3A), 빨간색(#EF3340) 중 하나 이상의 색이 모든 국가의 국기에 존재합니다.
- 하얀 바탕은 평화를 상징합니다. 올림픽의 정신인 평화와 화합을 의미합니다.
도형 위치와 색상
올림픽 오륜기와 프랑스 국기는 각각 독특한 색상과 배치를 가지고 있습니다. 이를 효과적으로 시각화하기 위해서는 각 도형의 위치와 색상을 정확히 지정하는 것이 중요합니다.
올림픽 오륜기는 파란색, 검은색, 빨간색, 노란색, 초록색의 다섯 개의 원으로 구성되어 있으며, 각 원은 일정한 간격으로 배치되어 있습니다. 프랑스 국기는 파란색, 하얀색, 빨간색의 세 가지 색으로 구성된 세로 줄무늬로 되어 있습니다. 이러한 구성을 데이터 시각화로 표현하기 위해 ggplot2 패키지를 사용할 것입니다.
R Code 설명
1. 패키지 로드
우선 필요한 패키지인 ggplot2
와 grid
를 로드합니다. ggplot2
는 데이터 시각화를 위한 패키지이며, grid
는 레이아웃을 제어하기 위해 사용됩니다.
library(ggplot2)
library(grid)
ggplot2
는 데이터 프레임을 이용하여 다양한 시각화를 손쉽게 만들 수 있도록 해주는 R 패키지입니다. grid
는 여러 그래픽 요소를 배치하고 레이아웃을 설정하는 데 유용한 도구입니다.
2. 올림픽 오륜기 그리기 함수
올림픽 오륜기를 그리기 위한 함수를 정의합니다. 다섯 개의 원을 각각의 색상으로 지정하고, 중심 좌표를 설정합니다.
# 올림픽 오륜기 그리기 함수
draw_olympic_flag <- function() {
# 올림픽 색상
olympic_colors <- c("#0057B8", "#000000", "#EF3340", "#FFA300", "#009B3A")
# 원 중심점 좌표 (실제 오륜기 기준)
centers <- data.frame(
x = c(-1.5, 0, 1.5, -0.75, 0.75),
y = c(0, 0, 0, -0.8, -0.8), # 노랑과 초록 원의 y 좌표를 -1에서 -0.8로 변경
color = olympic_colors
)
# ggplot으로 그리기
ggplot() +
geom_point(data = centers, aes(x=x, y=y, color=color), size=30, shape=1, stroke=5) +
scale_color_identity() +
coord_fixed(ratio = 1, xlim = c(-3, 3), ylim = c(-2, 1)) +
theme_void() +
theme(plot.background = element_rect(fill = "white", color = NA))
}
이 함수에서는 다섯 개의 색상과 각 원의 중심 좌표를 지정합니다. geom_point
를 사용하여 원을 그리고, scale_color_identity
를 사용하여 지정된 색상을 그대로 사용합니다. coord_fixed
를 통해 비율을 고정하고, theme_void
를 사용하여 배경과 축을 제거합니다.
geom_point
: 원을 그리기 위한 함수로, 데이터 프레임의 각 행에 대해 점을 그립니다.aes
: aesthetic 매핑을 정의하는 함수로, x축과 y축의 좌표 및 색상을 지정합니다.size
: 원의 크기를 지정합니다.shape
: 점의 모양을 지정합니다. 여기서는 원으로 설정합니다.stroke
: 원의 테두리 두께를 지정합니다.scale_color_identity
: 색상 매핑을 그대로 사용합니다.coord_fixed
: x축과 y축의 비율을 고정합니다.theme_void
: 축과 배경을 제거하여 깔끔한 그래프를 만듭니다.
3. 프랑스 국기 그리기 함수
프랑스 국기를 그리기 위한 함수를 정의합니다. 파랑, 하양, 빨강 세 가지 색상을 지정하고, 세로 줄무늬를 설정합니다.
# 프랑스 국기 그리기 함수
draw_french_flag <- function() {
# 프랑스 국기 색상
french_colors <- c("#002395", "white", "#ED2939")
# 국기 비율
flag_ratio <- 2/3
# ggplot으로 그리기
ggplot() +
geom_rect(aes(xmin = 0, xmax = 1, ymin = 0, ymax = 1), fill = french_colors[2]) +
geom_rect(aes(xmin = 0, xmax = 1/3, ymin = 0, ymax = 1), fill = french_colors[1]) +
geom_rect(aes(xmin = 2/3, xmax = 1, ymin = 0, ymax = 1), fill = french_colors[3]) +
coord_fixed(ratio = flag_ratio) +
theme_void()
}
이 함수에서는 세 가지 색상과 각각의 사각형 좌표를 지정합니다. geom_rect
를 사용하여 세로 줄무늬를 그리고, coord_fixed
를 통해 비율을 고정합니다. theme_void
를 사용하여 배경과 축을 제거합니다.
geom_rect
: 사각형을 그리기 위한 함수로, xmin, xmax, ymin, ymax를 이용하여 사각형의 위치를 지정합니다.fill
: 사각형의 색상을 지정합니다.coord_fixed
: x축과 y축의 비율을 고정하여 프랑스 국기의 비율을 유지합니다.theme_void
: 축과 배경을 제거하여 깔끔한 그래프를 만듭니다.
4. 두 국기 그리기 함수
두 국기를 나란히 그리기 위한 함수를 정의합니다. grid.layout
과 viewport
를 사용하여 레이아웃을 설정합니다.
# 두 국기 그리기
plot_flags <- function() {
grid.newpage()
pushViewport(viewport(layout = grid.layout(1, 2)))
print(draw_olympic_flag(), vp = viewport(layout.pos.row = 1, layout.pos.col = 1))
print(draw_french_flag(), vp = viewport(layout.pos.row = 1, layout.pos.col = 2))
}
이 함수에서는 새로운 페이지를 생성하고, 1행 2열의 레이아웃을 설정합니다. 각 뷰포트에 올림픽 오륜기와 프랑스 국기를 그립니다.
grid.newpage()
: 새로운 페이지를 생성합니다.pushViewport
: 뷰포트를 설정하여 레이아웃을 지정합니다.viewport(layout = grid.layout(1, 2))
: 1행 2열의 레이아웃을 생성합니다.print
: 각각의 뷰포트에 그래프를 출력합니다.
5. 함수 실행
모든 함수를 실행하여 국기를 그립니다.
# 국기 그리기 실행
plot_flags()
일반적인 실수와 피하는 방법
시각화를 할 때 자주 발생하는 실수와 이를 피하는 방법에 대해 알아보겠습니다.
- 좌표와 색상의 불일치: 올림픽 오륜기처럼 특정한 위치와 색상이 중요한 시각화에서는 각 도형의 위치와 색상을 정확히 지정해야 합니다. 특히, 오륜기의 각 원의 중심 좌표를 정확히 설정하는 것이 중요합니다. 이를 위해 데이터 프레임을 사용하여 좌표와 색상을 명확히 정의합니다.
- 비율 유지: 프랑스 국기와 같은 비율이 중요한 시각화에서는
coord_fixed
함수를 사용하여 비율을 유지해야 합니다. 그렇지 않으면 국기의 비율이 왜곡될 수 있습니다. - 테마 설정: 불필요한 축과 배경 요소를 제거하기 위해
theme_void
를 사용합니다. 이는 시각화의 깔끔함을 유지하는 데 도움이 됩니다.
전체 코드 및 결과
전체 소스코드는 아래와 같습니다.
library(ggplot2)
library(grid)
# 올림픽 오륜기 그리기 함수
draw_olympic_flag <- function() {
olympic_colors <- c("#0057B8", "#000000", "#EF3340", "#FFA300", "#009B3A")
centers <- data.frame(
x = c(-1.5, 0, 1.5, -0.75, 0.75),
y = c(0, 0, 0, -0.8, -0.8),
color = olympic_colors
)
ggplot() +
geom_point(data = centers, aes(x=x, y=y, color=color), size=30, shape=1, stroke=5) +
scale_color_identity() +
coord_fixed(ratio = 1, xlim = c(-3, 3), ylim = c(-2, 1)) +
theme_void() +
theme(plot.background = element_rect(fill = "white", color = NA))
}
# 프랑스 국기 그리기 함수
draw_french_flag <- function() {
french_colors <- c("#002395", "white", "#ED2939")
flag_ratio <- 2/3
ggplot() +
geom_rect(aes(xmin = 0, xmax = 1, ymin = 0, ymax = 1), fill = french_colors[2]) +
geom_rect(aes(xmin = 0, xmax = 1/3, ymin = 0, ymax = 1), fill = french_colors[1]) +
geom_rect(aes(xmin = 2/3, xmax = 1, ymin = 0, ymax = 1), fill = french_colors[3]) +
coord_fixed(ratio = flag_ratio) +
theme_void()
}
# 두 국기 그리기
plot_flags <- function() {
grid.newpage()
pushViewport(viewport(layout = grid.layout(1, 2)))
print(draw_olympic_flag(), vp = viewport(layout.pos.row = 1, layout.pos.col = 1))
print(draw_french_flag(), vp = viewport(layout.pos.row = 1, layout.pos.col = 2))
}
# 국기 그리기 실행
plot_flags()
이 코드를 실행하면 올림픽 오륜기와 프랑스 국기가 나란히 그려집니다. 각 국기는 정확한 색상과 비율로 시각화되어 있으며, theme_void
를 사용하여 깔끔한 결과를 제공합니다.
파리올림픽 기념 R코딩 마무리
2024년 파리 올림픽을 맞아, ggplot2를 통해 올림픽 오륜기와 프랑스 국기를 그리는 과정을 살펴보았습니다. 데이터 시각화는 데이터를 이해하고 전달하는 데 매우 중요한 도구입니다. 계속해서 다양한 시각화 기법을 배우싶으시면 R로 복잡한 관계도 디자인 하기(feat. DiagrammeR)포스트를 클릭해보세요!
오늘도 R 활용역량을 올려드리기 위해서 노력하는 Life2.0: IT Playground에 테리였습니다. 혹시 R이 뭔지 모르는데 한번 사용을 해볼까 하는 분은 R, RStudio 설치하기 – 윈도우 기준포스트를 참고하세요!