야구 포지션과 R로 그려보는 야구장 구조(야구 포지션 번호 포함)

2024 KBO리그가 9월 15일을 기점으로 사상 첫 1000만 관중 시대를 열었다고 합니다. 이를 기념하여 이번 포스트를 작성합니다. 야구에서 각 포지션에 따른 역할이 경기를 좌우하는 중요한 요소입니다. 아래 내용에서 야구 포지션을 설명하고, R을 사용해 야구장 구조와 포지션을 시각화하는 방법을 알아보겠습니다. 이를 통해 각 포지션이 어디에 위치하고 어떤 역할을 하는지 시각적으로 이해할 수 있습니다. 야구를 처음 접하거나 포지션의 역할에 대해 궁금한 분들이라면, 이 포스트를 통해 야구의 가장 기초 지식 중 하나를 습득하실 수 있으리라 생각합니다.

야구 포지션 포스트 그림

야구 포지션의 기본 이해

야구에는 총 9개의 포지션이 있으며, 각 포지션은 야구장에서 고유한 역할을 담당합니다. 야구 포지션 번호는 1번부터 9번까지 있으며, 각 번호는 특정 포지션을 나타냅니다. 예를 들어, 1번은 투수(Pitcher), 2번은 포수(Catcher)를 의미합니다. 이러한 포지션 번호는 경기 중 다양한 상황에서 중요한 역할을 합니다.

야구 포지션 도표 그림

야구 포지션 번호와 역할

  1. 1번: 투수 (Pitcher) – 투수는 공을 던지는 주 역할을 합니다. 마운드에서 타자에게 공을 던지며, 게임의 흐름을 좌우하는 중요한 역할을 맡습니다.
  2. 2번: 포수 (Catcher) – 포수는 타자 뒤에서 투수가 던진 공을 받으며, 수비와 경기 운영에서 중요한 포지션입니다.
  3. 3번: 1루수 (First Baseman) – 1루수는 1루에 위치하며, 타자가 1루로 출루할 때 수비를 맡습니다.
  4. 4번: 2루수 (Second Baseman) – 2루수는 2루 근처에서 수비를 담당하며, 내야 수비의 중심 역할을 합니다.
  5. 5번: 3루수 (Third Baseman) – 3루수는 3루를 수비하며, 상대가 3루로 달려올 때 빠른 반응이 요구됩니다.
  6. 6번: 유격수 (Shortstop) – 유격수는 2루와 3루 사이에 위치하여 내야 수비의 중요한 축을 담당합니다.
  7. 7번: 좌익수 (Left Fielder) – 좌익수는 외야 좌측에서 수비하며, 장타나 외야로 날아가는 타구를 잡는 역할을 합니다.
  8. 8번: 중견수 (Center Fielder) – 중견수는 외야 중앙에서 수비를 하며, 외야의 중심적인 역할을 맡습니다.
  9. 9번: 우익수 (Right Fielder) – 우익수는 외야 우측에서 수비하며, 타구를 받아내고 빠르게 송구하는 역할을 합니다.

이처럼 야구 포지션은 경기의 흐름을 좌우하는 중요한 역할을 하며, 각 포지션은 서로 협력하여 팀의 수비를 강화합니다.

R로 야구장 구조 그리기: 포지션 시각화

이제 R을 사용하여 야구장의 구조와 야구 포지션을 시각화해보겠습니다. 이를 통해 각 포지션이 야구장 내 어디에 위치하는지 쉽게 이해할 수 있습니다. R의 시각화 라이브러리인 ggplot2를 사용하여 간단한 야구장과 포지션을 그리는 방법을 알아보겠습니다.

아래는 좌표선과 불필요한 요소들을 제거하고, 야구장 구조를 다이아몬드 형태로 그린 R 코드와 그에 대한 상세한 설명입니다.

R 코드: 다이아몬드 형태의 야구장과 포지션 그리기

# 필요한 라이브러리 불러오기
library(ggplot2)

# 야구장 다이아몬드 모양 좌표 설정 (홈-1루-2루-3루-홈)
baseball_field <- data.frame(
    x = c(0, 90, 0, -90, 0),  # 홈, 1루, 2루, 3루, 다시 홈으로 돌아오는 좌표
    y = c(0, 90, 180, 90, 0)
)

# 포지션 데이터 설정 (번호와 한글/영문을 줄바꿈 처리하여 표시)
positions <- data.frame(
    position = c("1. 투수\n(Pitcher)", "2. 포수\n(Catcher)", "3. 1루수\n(First Baseman)", 
                 "4. 2루수\n(Second Baseman)", "5. 3루수\n(Third Baseman)", "6. 유격수\n(Shortstop)", 
                 "7. 좌익수\n(Left Fielder)", "8. 중견수\n(Center Fielder)", "9. 우익수\n(Right Fielder)"),
    x = c(0, 0, 90, 45, -90, -45, -130, 0, 130),  # 포지션에 따른 x 좌표
    y = c(60, -10, 90, 120, 90, 120, 180, 210, 180),  # 포지션에 따른 y 좌표
    vjust = c(-1, -1, -1, -1, -1, -1, 2, 2, 2)  # 각 포지션별로 텍스트의 수직 정렬 설정
)

# 야구장과 포지션을 그리는 코드
ggplot() + 
    geom_polygon(data = baseball_field, aes(x = x, y = y), fill = "green", color = "white", size = 1.5) +  # 다이아몬드 그리기
    geom_point(data = positions, aes(x = x, y = y), color = "red", size = 5) +  # 포지션 점 그리기
    geom_text(data = positions, aes(x = x, y = y, label = position, vjust = vjust), color = "blue", size = 6) +  # 포지션 이름 표시
    theme_void()  # 불필요한 축 및 좌표 제거

전체 코드 설명

1. 필요한 라이브러리 불러오기
library(ggplot2)
  • ggplot2: R에서 가장 널리 사용되는 시각화 패키지입니다. ggplot2를 사용하여 야구장의 다이아몬드 구조와 각 포지션을 시각화합니다. 이 패키지는 데이터프레임을 기반으로 시각화 요소(도형, 텍스트, 점 등)를 쉽게 그릴 수 있도록 해줍니다.
2. 야구장 다이아몬드 모양 좌표 설정
# 야구장 다이아몬드 모양 좌표 설정 (홈-1루-2루-3루-홈)
baseball_field <- data.frame(
  x = c(0, 90, 0, -90, 0),  # 홈, 1루, 2루, 3루, 다시 홈으로 돌아오는 좌표
  y = c(0, 90, 180, 90, 0)
)
  • baseball_field 데이터프레임: 야구장 다이아몬드 모양을 그리기 위한 좌표를 설정합니다.
  • x 좌표: 홈베이스에서 시작하여 1루(+90), 2루(0), 3루(-90), 다시 홈으로 돌아가는 x 좌표.
  • y 좌표: 홈(0)에서 시작하여 1루(90), 2루(180), 3루(90), 홈으로 돌아오는 y 좌표.
  • 이 좌표들을 통해 야구장의 다이아몬드 형태를 시각적으로 그릴 수 있습니다.
3. 포지션 데이터 설정
# 포지션 데이터 설정 (번호와 한글/영문을 줄바꿈 처리하여 표시)
positions <- data.frame(
  position = c("1. 투수\n(Pitcher)", "2. 포수\n(Catcher)", "3. 1루수\n(First Baseman)", 
               "4. 2루수\n(Second Baseman)", "5. 3루수\n(Third Baseman)", "6. 유격수\n(Shortstop)", 
               "7. 좌익수\n(Left Fielder)", "8. 중견수\n(Center Fielder)", "9. 우익수\n(Right Fielder)"),
  x = c(0, 0, 90, 45, -90, -45, -130, 0, 130),  # 포지션에 따른 x 좌표
  y = c(60, -10, 90, 120, 90, 120, 180, 210, 180),  # 포지션에 따른 y 좌표
  vjust = c(-1, -1, -1, -1, -1, -1, 2, 2, 2)  # 각 포지션별 텍스트의 수직 정렬 설정
)
  • positions 데이터프레임: 각 포지션의 이름, 좌표, 텍스트의 수직 정렬(vjust)을 설정합니다.
  • position: 각 포지션 이름을 “번호. 한글명\n(영문명)” 형식으로 지정합니다. \n은 줄바꿈을 의미하며, 영문 명칭이 한 줄 아래로 내려갑니다.
    • 예: 1. 투수 (Pitcher), 2. 포수 (Catcher) 등.
  • x, y 좌표: 각 포지션이 야구장에서 어디에 위치하는지 설정합니다. 이 좌표는 실제 야구장에서 각 포지션이 위치하는 곳을 기반으로 설정되었습니다.
    • 1번 투수 (Pitcher)는 마운드에 위치하며, x = 0, y = 60에서 설정됩니다.
    • 2번 포수 (Catcher)는 타석 뒤에 위치하며, x = 0, y = -10에서 설정됩니다.
    • 7번 좌익수 (Left Fielder)는 외야 좌측에 위치하며, x = -130, y = 180에서 설정됩니다.
  • vjust: 각 포지션 텍스트가 점 위나 아래에 표시되도록 수직 정렬 값을 설정합니다.
    • vjust = -1: 텍스트가 점 위에 표시됩니다. 이는 1~6번 포지션에 적용됩니다.
    • vjust = 2: 텍스트가 점 아래에 표시됩니다. 이는 7번(좌익수), 8번(중견수), 9번(우익수) 포지션에 적용됩니다.
4. 야구장과 포지션을 그리는 코드
ggplot() + 
  geom_polygon(data = baseball_field, aes(x = x, y = y), fill = "green", color = "white", size = 1.5) +  # 다이아몬드 그리기
  geom_point(data = positions, aes(x = x, y = y), color = "red", size = 5) +  # 포지션 점 그리기
  geom_text(data = positions, aes(x = x, y = y, label = position, vjust = vjust), color = "blue", size = 4) +  # 포지션 이름 표시
  theme_void()  # 불필요한 축 및 좌표 제거

ggplot()

  • ggplot()는 R에서 그래프를 그리기 위한 기본 함수입니다. 이 함수는 geom_polygon(), geom_point(), geom_text() 등 시각화 요소를 추가할 수 있는 틀을 제공합니다.

geom_polygon() 함수

  • geom_polygon()은 야구장의 다이아몬드 모양을 그리는 함수입니다.
  • data = baseball_field: 다이아몬드를 그리기 위한 좌표 데이터입니다. 앞서 정의한 baseball_field 데이터프레임을 사용해 홈-1루-2루-3루-홈으로 이어지는 다이아몬드를 그립니다.
  • fill = “green”: 야구장 필드를 녹색으로 채웁니다.
  • color = “white”: 테두리를 흰색으로 설정해 다이아몬드 경계선을 명확히 합니다.
  • size = 1.5: 테두리의 두께를 설정해 다이아몬드 경계선을 강조합니다.

geom_point() 함수

  • geom_point()는 각 포지션의 위치를 나타내는 빨간색 점을 찍는 함수입니다.
  • data = positions: 포지션의 좌표를 기반으로 점을 표시합니다.
  • color = “red”: 포지션을 빨간 점으로 나타냅니다.
  • size = 5: 점의 크기를 설정하여 포지션이 명확히 보이도록 합니다.

geom_text() 함수

  • geom_text()는 각 포지션의 이름을 점 위(또는 아래)에 텍스트로 표시하는 함수입니다.
  • label = position: 포지션 이름(번호. 한글명 \n 영문명)을 표시합니다.
  • vjust: positions 데이터프레임에서 정의한 vjust 값을 사용해 각 포지션의 텍스트를 점 위나 아래에 표시합니다.
    • 1~6번 포지션은 점 위에 표시되고, 7~9번 포지션은 점 아래에 표시됩니다.
  • color = “blue”: 텍스트 색상을 파란색으로 설정하여 가독성을 높입니다.
  • size = 4: 텍스트 크기를 설정하여 명확히 보이도록 합니다.

theme_void() 함수

  • theme_void()는 그래프에서 불필요한 축, 좌표선, 배경 등을 제거하여 필드와 포지션만 깔끔하게 시각화할 수 있게 합니다.

정리하기: R을 사용한 야구 포지션 시각화

이번 포스트에서는 야구 포지션에 대한 기본적인 설명과 함께 R을 사용하여 야구장을 시각화하는 방법을 다루었습니다. 야구 포지션 번호와 영어 명칭을 통해 포지션의 역할을 이해하고, R로 이를 시각화하는 과정을 통해 더욱 명확한 인사이트를 얻을 수 있었습니다. 이 포스트가 여러분이 야구 경기를 더욱 재미있게 이해하는 데 도움이 되기를 바랍니다!

야구 상식 알아보러 왔다가 ‘이런 세계도 다 있네~ 궁금한데 나도 한번 해볼까?’ 하시는 분이 계시다면 먼저 R, RStudio 설치하기 – 윈도우 기준 포스트를 봐주시기를 조언드립니다.

유사한 게시물