Python

Python: 그래프 디자인(그리드, 그래프 내 텍스트, 범례 설정, 단위 수정)

작심반복하기 2025. 6. 14. 15:28

[주요 함수] 

더보기

revenue_fin.isna().sum() : 결측값 확인 

def format_to_billion ( ) : matplotlib에서 축 눈금을 사용자가 원하는 형태(예: 억 단위)로 바꾸기 위해 만든 포맷 함수

plt.gca( ) : 현재 그리는 그래프의 '축' 정보를 가져오는 함수 

plt. text ( ): 그래프 내 텍스트 입력을 위한 함수 

[1] 라이브러리 불러오기 

import pandas as pd
import matplotlib.pyplot as plt

 

[2] 파일 불러오기 

revenue= pd.read_excel(r"파일경로")
revenue_t=revenue.transpose() #행열 전환 
revenue_t

<결과> 

 

[3] 데이터 정리 

revenue_t.columns =revenue_t.iloc[0] #첫 행을 열 이름으로 지정 
revenue_final =revenue_t.drop(revenue_t.index[0]) #첫 행 삭제 
revenue_fin =revenue_final.drop(revenue_final.index[0]) #첫 행 삭제 
revenue_fin

<결과> 

 

[4] 결측치 확인 

revenue_fin.isna().sum()

 

[5] 전산업 열 추출 

all_industries=revenue_fin[['전산업']]
all_industries

<결과> 

 

[6] 연도별 전산업 시각화 

years= all_industries.index 

plt.rcParams['font.family'] = 'Malgun Gothic'  #글꼴 설정 

def format_to_billion(y, _): 
    return f'{y / 10000:.0f}억' #y축 값 단위 설정 
    
plt.figure(figsize = (25,15)) # 그래프 사이즈 
plt.title('전산업 매출액',fontsize=25) # 제목 및 글자 사이즈 
plt.plot(all_industries.index,all_industries['전산업']) # x축 값, y축 값 설정 
plt.grid(True, linestyle='--',alpha=0.7) # 격자 유무 및 디자인(--), 크기 설정 
plt.xlabel('연도', fontsize=15) # x축 값 지정 
plt.ylabel('매출액(억 원)', fontsize=15) # y축 값 지정 
plt.xticks(years,fontsize=15) #눈금 사이즈 
plt.yticks(fontsize=15)
plt.gca().yaxis.set_major_formatter(format_to_billion)

plt.show()

<결과> 

 

[7] 연도별 각 산업 시각화 

year2=revenue_fin.index 

other_industries = revenue_fin[['농업', '어업', '광업', '제조업', '비제조업', '전기, 가스, 증기 및 공기조절 공급업', '건설업',
       '서비스업', '하수 · 폐기물 처리, 원료재생업', '도매 및 소매업', '운수 및 창고업', '숙박 및 음식점업',
       '정보통신업', '부동산업', '전문, 과학 및 기술 서비스업', '사업시설관리 및 사업지원 및 임대서비스업',
       '교육 서비스업', '예술, 스포츠 및 여가관련 서비스업', '개인 및 소비용품 수리업', '기타 개인 서비스업',
       '제조업 중화학공업', '제조업 경공업', '정보통신기술산업']]
plt.rcParams['font.family'] = 'Malgun Gothic' 

def format_to_billion(y, _):
    return f'{y / 10000:.0f}억'

plt.figure(figsize = (25,15)) 
plt.title('산업별 매출액',fontsize=25)
plt.plot(other_industries)
plt.grid(True, linestyle='--',alpha=0.7)
plt.xlabel('연도', fontsize=15) 
plt.ylabel('매출액(억 원)', fontsize=15)
plt.legend(other_industries.columns.values, loc='center left',bbox_to_anchor=(1, 0.5),fontsize=10) #범례설정 
plt.xticks(year2,fontsize=15) 
plt.yticks(fontsize=15)
plt.gca().yaxis.set_major_formatter(format_to_billion)
  • def format_to_billion( ): matplotlib에서 축 눈금(y축 값)을 사용자가 원하는 형태(예: 억 단위)로 바꾸기 위해 만든 포맷 함수
  • y:  y축 눈금 값 (자동으로 넘겨짐, 예: 100000, 250000 등)
  • _: 불필요한 두 번째 인자 (matplotlib이 자동으로 넘김, 보통 x위치 정보)
  • y / 10000: 만 단위로 나눔 → 즉, 억 원 단위 변환
    예: 500000 → 500000 / 10000 = 50 → 50억
  • :.0f: 소수점 없이 정수로 출력
  • f'{...}억': 뒤에 "억" 단위를 붙임
  • plt.gca() : 현재 그리는 그래프의 '축' 정보를 가져옴 
  • .yaxis.set_major_formatter( ) : y축의 주 눈금(major ticks)의 표시 형식을 바꿈 
top5 = other_industries.loc[2023].sort_values(ascending=False).head(5) #2023년도 매출액이 큰 순으로 정렬하고 상위 5개 산업 추출
 #상위 5개 산업에 텍스트 표시
for col in top5.index: 
    x = other_industries.index[-1] #텍스트 x좌표 위치 
    y = other_industries.loc[x, col] #텍스트 y좌표 위치 
    plt.text(x+0.6 , y, f'{col}: {y+10000/ 10000:.0f}억', fontsize=18, ha='right', va='top', color='red')
  • plt.text(x좌표, y좌표, 텍스트 내용, 옵션들) 
  • x+0.6 : 텍스트를 오른쪽에 띄워서 배치하겠다는 의미 (값 조정 가능) 
  • f'{col}: {y+10000/10000:.0f}억' =-> 텍스트 내용 ( 예: "서비스업: 450000억 )
  • y + 10000 / 10000은 사실상 y + 1과 같고, 결과에 큰 영향 없지만 소수점 방지를 위해 넣음 =>GPT 도
  • ha='right': 텍스트 오른쪽 정렬
  • va='top': 텍스트 위에서 정렬
  • color='red': 글자색 빨간색
plt.tight_layout()
plt.show() # 그래프 출력

<결과> 

 

 

+ 각 연도 마다 텍스트 값 입력하고 싶은 경우 : zip ( ) 이용하기  

  • zip ( ) : 두 리스트  값을 짝 지어주는 함수 
  • plt.text()는 그래프가 그려진 뒤에 텍스트를 얹는 함수 plt.figure 이후에 실행
for x,y in zip(energy['연도'].values, energy['투자액(억원)'].values):
    plt.text(x,y+5,f'{int(y)}억',ha='center',va='bottom',fontsize=17, color='red',fontweight='bold')

다른 프로젝트에서의 결과