[미래유망] Plotly #06 - 3 Plotly Basic Chart

돼지인간·2025년 6월 19일

미래유망

목록 보기
37/41

본 벨로그는 공공데이터 포털에서 가져온 데이터로 작업하였습니다.

Pie Chart

Pie Chart는 파이 차트는 하나의 원을 여러 영역 또는 조각으로 나눈 원그래프입니다. 각 조각은 해당 변수에 대한 한 수준의 관측치 개수 또는 백분율을 나타냅니다.

express, graph_object를 이용한 방법

# express 방법
import pandas as pd
import plotly.express as px
import plotly.graph_objects as go
import numpy as np

data = pd.read_csv('onlineSulmoon.csv', encoding='utf-8')
data.columns = data.columns.str.strip()
col = '1-4 집에 함께 살고 있는 인원은 몇 명입니까'
data = data[[col]].dropna()

# reset_index : values_counts()로 같은 값을 센 결과를 DataFrame형태로 바꿈
count_data = data[col].value_counts().reset_index()
# 그 값을 보기 쉽게 컬럼으로 만들고 이름을 count로 줌
count_data.columns = [col, 'count']
count_data[col] = count_data[col].apply(lambda x: f"{x}명") # 람다식으로 범례 뒤에 명 붙임

# 그래프 그리기
fig = px.pie(count_data, values='count', names=col)

# 알아보기 쉽게 하기 위해 추가한 것(제목과 날짜 축 관리)
fig.update_layout(
    title=dict(
        text="집에 함께 살고 있는 인원은 몇명인가요??"
    )
)

fig.show()
# graph_object를 활용한 방법
import pandas as pd
import plotly.express as px
import plotly.graph_objects as go
import numpy as np

data = pd.read_csv('onlineSulmoon.csv', encoding='utf-8')
data.columns = data.columns.str.strip()
col = '1-4 집에 함께 살고 있는 인원은 몇 명입니까'
data = data[[col]].dropna()

# reset_index : values_counts()로 같은 값을 센 결과를 DataFrame형태로 바꿈
count_data = data[col].value_counts().reset_index()
# 그 값을 보기 쉽게 컬럼으로 만들고 이름을 count로 줌
count_data.columns = [col, 'count']

# 그래프 그리기
fig.add_trace(go.Pie(labels=count_data[col], values=count_data['count']))

# 알아보기 쉽게 하기 위해 추가한 것(제목과 날짜 축 관리)
fig.update_layout(
    title=dict(
        text="집에 함께 살고 있는 인원은 몇명인가요??"
    )
)

fig.show()

도넛 모양 Pie Chart 만들기

Pie 차트 가운데 구멍이 뚤린 도넛모양의 Pie Chart를 표현하려면 아래의 코드를 추가해야 합니다.

import pandas as pd
import plotly.express as px
import plotly.graph_objects as go
import numpy as np

data = pd.read_csv('onlineSulmoon.csv', encoding='utf-8')
data.columns = data.columns.str.strip()
col = '1-4 집에 함께 살고 있는 인원은 몇 명입니까'
data = data[[col]].dropna()

# reset_index : values_counts()로 같은 값을 센 결과를 DataFrame형태로 바꿈
count_data = data[col].value_counts().reset_index()
# 그 값을 보기 쉽게 컬럼으로 만들고 이름을 count로 줌
count_data.columns = [col, 'count']

# 그래프 그리기
fig = px.pie(count_data, values='count', names=col)
fig.update_traces(hole=.3) # 구멍 추가

# 알아보기 쉽게 하기 위해 추가한 것(제목과 날짜 축 관리)
fig.update_layout(
    title=dict(
        text="집에 함께 살고 있는 인원은 몇명인가요??"
    )
)

fig.show()

조각 별로 띄우기

Pie Chart를 각 조각별로 띄워서 강조를 하기 위해서는 아래 코드를 추가해야 합니다.

import pandas as pd
import plotly.express as px
import plotly.graph_objects as go
import numpy as np

data = pd.read_csv('onlineSulmoon.csv', encoding='utf-8')
data.columns = data.columns.str.strip()
col = '1-4 집에 함께 살고 있는 인원은 몇 명입니까'
data = data[[col]].dropna()

# reset_index : values_counts()로 같은 값을 센 결과를 DataFrame형태로 바꿈
count_data = data[col].value_counts().reset_index()
# 그 값을 보기 쉽게 컬럼으로 만들고 이름을 count로 줌
count_data.columns = [col, 'count']

# 그래프 그리기
fig = px.pie(count_data, values='count', names=col)
fig.update_traces(pull=[0.2, 0, 0, 0, 0]) # 조각으로 띄우는 코드

# 알아보기 쉽게 하기 위해 추가한 것(제목과 날짜 축 관리)
fig.update_layout(
    title=dict(
        text="집에 함께 살고 있는 인원은 몇명인가요??"
    )
)

fig.show()

내부 텍스트 편집 및 Pie 스타일 편집

말 그대로 pie plot을 꾸미려면 다음과 같은 코드를 추가하면 됩니다.

import pandas as pd
import plotly.express as px
import plotly.graph_objects as go
import numpy as np

data = pd.read_csv('onlineSulmoon.csv', encoding='utf-8')
data.columns = data.columns.str.strip()
col = '1-4 집에 함께 살고 있는 인원은 몇 명입니까'
data = data[[col]].dropna()

# reset_index : values_counts()로 같은 값을 센 결과를 DataFrame형태로 바꿈
count_data = data[col].value_counts().reset_index()
# 그 값을 보기 쉽게 컬럼으로 만들고 이름을 count로 줌
count_data.columns = [col, 'count']

# 그래프 그리기
fig = px.pie(count_data, values='count', names=col)
fig.update_traces(marker_colors =px.colors.sequential.RdBu , marker_line_color= "black",marker_line_width = 2) # 그래프 꾸미기
fig.update_traces(textposition='outside',textinfo='label+percent+value', textfont_size=20,textfont_color="black") # 내부 텍스트 편집

# 알아보기 쉽게 하기 위해 추가한 것(제목과 날짜 축 관리)
fig.update_layout(
    title=dict(
        text="집에 함께 살고 있는 인원은 몇명인가요??"
    )
)

fig.show()


Gantt Charts

Gantt Chart 시간 경과에 따른 프로젝트 계획을 시각화하는방법으로 어떤 작업이 언제, 누구에 의해 완료될 예정인지 보여줍니다

기본 사용법

import pandas as pd
import plotly.express as px
import plotly.graph_objects as go
import numpy as np

data = pd.read_csv('sukfloordel.csv', encoding='utf-8')
data.columns = data.columns.str.strip()
data = data[['공사현장명', '해체작업시작일', '해체작업종료일', '건물명']].dropna()
data['해체작업시작일'] = pd.to_datetime(data['해체작업시작일'], errors='coerce')
data['해체작업종료일'] = pd.to_datetime(data['해체작업종료일'], errors='coerce')
data = data.head(10)

fig = px.timeline(data, x_start="해체작업시작일", x_end="해체작업종료일", y="공사현장명")
# 알아보기 쉽게 하기 위해 추가한 것(제목과 날짜 축 관리)
fig.update_layout(
    title=dict(
        text="석면 해체 작업 일정"
    )
)
fig.update_yaxes(autorange="reversed")
fig.update_xaxes(showline=True, linewidth=1, linecolor='black', tickformat="%Y-%m-%d")
fig.show()

색으로 담당자 구분하기

간트 차트 내에 범주형 데이터 구분을 색을 통해 가능합니다. 주로 프로젝트 별 담당자를 구분할 때 사용합니다.

import pandas as pd
import plotly.express as px
import plotly.graph_objects as go
import numpy as np

data = pd.read_csv('sukfloordel.csv', encoding='utf-8')
data.columns = data.columns.str.strip()
data = data[['공사현장명', '해체작업시작일', '해체작업종료일', '건물명']].dropna()
data['해체작업시작일'] = pd.to_datetime(data['해체작업시작일'], errors='coerce')
data['해체작업종료일'] = pd.to_datetime(data['해체작업종료일'], errors='coerce')
data = data.head(10)

fig = px.timeline(data, x_start="해체작업시작일", x_end="해체작업종료일", y="공사현장명", color='건물명')
# 알아보기 쉽게 하기 위해 추가한 것(제목과 날짜 축 관리)
fig.update_layout(
    title=dict(
        text="건물에 따른 석면 해체 작업 일정"
    )
)
fig.update_xaxes(showline=True, linewidth=1, linecolor='black', tickformat="%Y-%m-%d")
fig.show()

colormap을 활용해 프로젝트 진행도 표현하기

간트 차트 내에 연속형 데이터는 구분을 colormap을 활용해 표현 가능합니다. 주로 프로잭트 별 수행도 백분율을 표시할 때 사용됩니다

import pandas as pd
import plotly.express as px
import plotly.graph_objects as go
import numpy as np

data = pd.read_csv('sukfloordel.csv', encoding='utf-8')
data.columns = data.columns.str.strip()
data = data[['공사현장명', '해체작업시작일', '해체작업종료일', '건물명']].dropna()

data['해체작업시작일'] = pd.to_datetime(data['해체작업시작일'], errors='coerce')
data['해체작업종료일'] = pd.to_datetime(data['해체작업종료일'], errors='coerce')
data = data.head(10)

# 임의의 진행 상태 추가
data['진행상태'] = ['진행 중', '완료', '진행 중', '진행 중', '완료', '진행 중', '완료', '진행 중', '완료', '진행 중']

fig = px.timeline(data, x_start="해체작업시작일", x_end="해체작업종료일", y="공사현장명", color="진행상태")

# 알아보기 쉽게 하기 위해 추가한 것(제목과 날짜 축 관리)
fig.update_layout(
    title=dict(
        text="석면 해체 작업 일정"
    )
)
fig.update_yaxes(autorange="reversed")
fig.update_xaxes(showline=True, linewidth=1, linecolor='black', tickformat="%Y-%m-%d")

# 차트 출력
fig.show()


Table

Table 이란 세로줄과 가로줄의 모델을 이용하여 정렬된 데이터 집합(값)의 모임입니다 엑셀, Pandas 등이 대표적인 Table 데이터를 활용한 Tool 입니다.

기본 사용방법

go.Table(header=dict(values=[~~~],), # 헤더 관련 인풋
         cells=dict(values=[[~~~~], # 1 열 데이터
                            [~~~~]])) # 2 열 데이터

이러하지만 우린 바로 pandas 데이터 프레임으로 불러오는 것부터 시작하겠다.

테이블 행 열 너비/높이 지정

import pandas as pd
import plotly.express as px
import plotly.graph_objects as go
import numpy as np

data = pd.read_csv('rest.csv', encoding='utf-8')
data.columns = data.columns.str.strip()
data = data.head(15)
# Figure 생성
fig = go.Figure()

#테이블 생성
fig.add_trace(go.Table(columnwidth = [80,400],
    header=dict(values=list(data.columns),
                fill_color='paleturquoise',
                align='left',
                height=50),
    cells=dict(values=[data.평가등급, data.휴게소명, data.시설구분],
               fill_color='lavender',
               align='left',
               height=50)))

fig.show()

테이블 스타일 지정하기

  • 열 별로 색을 다르게 하고싶다면
import pandas as pd
import plotly.express as px
import plotly.graph_objects as go
import numpy as np

data = pd.read_csv('rest.csv', encoding='utf-8')
data.columns = data.columns.str.strip()
data = data.head(15)
# Figure 생성
fig = go.Figure()

#테이블 생성
fig.add_trace(go.Table(columnwidth = [80,400],
    header=dict(values=list(data.columns),
                fill_color=['rgb(239, 243, 255)', 'rgb(189, 215, 231)'],
                align='left',
                height=50),
    cells=dict(values=[data.평가등급, data.휴게소명, data.시설구분],
               fill_color=['rgb(239, 243, 255)', 'rgb(189, 215, 231)'],
               align='left',
               height=50)))

fig.show()

  • 행별로 색을 다르게 하고 싶다면
import pandas as pd
import plotly.express as px
import plotly.graph_objects as go
import numpy as np

data = pd.read_csv('rest.csv', encoding='utf-8')
data.columns = data.columns.str.strip()
data = data.head(15)
# Figure 생성
fig = go.Figure()

# 행별 색 리스트 생성
colors = ['rgb(239, 243, 255)', 'rgb(189, 215, 231)', 'rgb(107, 174, 214)', 'rgb(49, 130, 189)']

#테이블 생성
fig.add_trace(go.Table(columnwidth = [80,400],
    header=dict(values=list(data.columns),
                align='left',
                height=50),
    cells=dict(values=[data.평가등급, data.휴게소명, data.시설구분],
               fill_color=[colors, colors],
               align='left',
               height=50)))

fig.show()
  • 행별로 색을 지정하는 방법은 없습니다.
  • 대신에 fill_color에 모든 칸별로 색을 지정하되 같은 행은 같은색을 지정하는 방법으로 구현합니다.
  • 예제는 2열 4행의 데이터 형태로 2*4 형태의 색 리스트를 생성하여 넣어주었습니다

텍스트 스타일 편집

import pandas as pd
import plotly.express as px
import plotly.graph_objects as go
import numpy as np

data = pd.read_csv('rest.csv', encoding='utf-8')
data.columns = data.columns.str.strip()
data = data.head(15)
# Figure 생성
fig = go.Figure()

#테이블 생성
fig.add_trace(go.Table(columnwidth = [80,400],
    header=dict(values=list(data.columns),
                fill_color='paleturquoise',
                align='left',
                font_size=20,
                height=50),
    cells=dict(values=[data.평가등급, data.휴게소명, data.시설구분],
               fill_color='lavender',
               align='left',
               font_size=10,
               font_color = 'blue',
               height=50)))

fig.show()

figure_factory 를 활용해서 불러오기

import plotly.figure_factory as ff
data = pd.read_csv('rest.csv', encoding='utf-8')
#테이블 생성
fig =  ff.create_table(data)

fig.show()


profile
안녕하세요 게임개발을 공부하고 있는 돼지인간 입니다.

0개의 댓글