2. plotly

๐Ÿ“Š ์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” iplot๋ณด๋‹ค ์„ธ์‹ฌํ•˜๊ฒŒ ์‹œ๊ฐํ™”๊ฐ€ ๊ฐ€๋Šฅํ•œ plotly์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.


2.1. plotly ์‚ฌ์šฉํ•˜๊ธฐ

๐Ÿ“Š ๋จผ์ € plotly๋ฅผ ์„ค์น˜ํ•ด์ค์‹œ๋‹ค!!

!pip install plotly

๐Ÿ“Š ์ด์ œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ž„ํฌํŠธํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

import plotly.graph_objects as go
import plotly.offline as pyo
pyo.init_notebook_mode()

๐Ÿ“Š iplot๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ plotly ์—ญ์‹œ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๊ทธ๋ž˜ํ”„ ํ…Œ๋งˆ๊ฐ€ ์žˆ๋Š”๋ฐ, plotly ์—์„œ๋Š” ์ด๊ฒƒ์„ template์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. template ๋ชฉ๋ก์„ ํ•œ๋ฒˆ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

import plotly. io as pio
pio.templates
>>
Templates configuration
-----------------------
    Default template: 'plotly'
    Available templates:
        ['ggplot2', 'seaborn', 'simple_white', 'plotly',
         'plotly_white', 'plotly_dark', 'presentation', 'xgridoff',
         'ygridoff', 'gridon', 'none']

2.2. ๊ธฐ๋ณธํ˜•ํƒœ

๐Ÿ“Š ๊ธฐ๋ณธ์ ์ธ ํ˜•ํƒœ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • fig = go.Figure()
  • fig.add_trace( go.๊ทธ๋ž˜ํ”„์ข…๋ฅ˜( x = data1, y = data2 ) )
  • fig.update_layout()
  • fig.add_annotation()
  • fig.show()
  • ๐Ÿ™ƒ iplot์€ ๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„์—์„œ ๋ฐ”๋กœ ๊ทธ๋ž˜ํ”„๋ฅผ ๊ทธ๋ฆด ์ˆ˜ ์žˆ์ง€๋งŒ ( Dataframe.iplot( ~ ) ) plotly๋Š” x์ถ•๊ณผ y์ถ•์˜ ๊ฐ’์„ ์ง€์ •ํ•ด์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค!!

2.2.1. fig.add_trace( )

๐Ÿ“Š fig.add_trace( ) ํ•จ์ˆ˜๋ฅผ ๊ฐ€์ง€๊ณ  ๊ทธ๋ž˜ํ”„์˜ ์ข…๋ฅ˜์™€ ๋ฐ์ดํ„ฐ, ๊ทธ๋ž˜ํ”„์˜ ์˜ต์…˜์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“Š์ธ์ˆ˜

  • go.๊ทธ๋ž˜ํ”„ ์ข…๋ฅ˜( ) - ๊ทธ๋ž˜ํ”„ ์ข…๋ฅ˜ ์ง€์ • ๋ฐ ์˜ต์…˜ ์ง€์ • ex) go.Scatter, go.Bar, go.Heatmap
  • x, y - ๋ฐ์ดํ„ฐ ์ง€์ •
  • mode - ๊ทธ๋ž˜ํ”„์˜ ์„ธ๋ถ€ ํ˜•ํƒœ ์ง€์ • ex) mode = โ€˜lines+markers+textโ€™
  • marker_color - marker์˜ ์ƒ‰์ƒ ์ง€์ •
  • text - mode์˜ text์— ๋“ค์–ด๊ฐˆ ๋‚ด์šฉ์„ ์ž‘์„ฑ
  • textposition - text์˜ ์œ„์น˜ ์ง€์ • ex) textposition = โ€˜top centerโ€™ / textposition = โ€˜autoโ€™
  • textfont_size - text์˜ ํฌ๊ธฐ ์„ค์ •
  • texttemplate - ์ •๊ทœํ‘œํ˜„์‹์œผ๋กœ ๊ทธ๋ž˜ํ”„์˜ text ํ˜•ํƒœ๋ฅผ ์„ ์–ธํ•ด์คŒ
  • name - ์ฃผ๋กœ ํ•˜๋‚˜์˜ figure ๊ฐ์ฒด์— ๋‘๊ฐœ ์ด์ƒ์˜ ๊ทธ๋ž˜ํ”„๋ฅผ ๊ทธ๋ฆด๋•Œ legend(์ฃผ์„) ์˜ต์…˜ ์ง€์ •


๐Ÿ“Š ํ•˜๋‚˜์˜ figure ๊ฐ์ฒด์— ์—ฌ๋Ÿฌ๊ฐœ์˜ ๊ทธ๋ž˜ํ”„๋ฅผ ๊ทธ๋ฆฌ๋ ค๋ฉด add_trace( )๋ฅผ ์—ฌ๋Ÿฌ๊ฐœ ์„ ์–ธํ•ด์ฃผ๋ฉด๋‹ค๋ฉ๋‹ˆ๋‹ค.


2.2.2. fig.update_layout( )

๐Ÿ“Š fig.update_layout( ) ํ•จ์ˆ˜๋ฅผ ๊ฐ€์ง€๊ณ  ๊ทธ๋ž˜ํ”„๊ฐ€ ๋“ค์–ด๊ฐˆ ๋ฐฐ๊ฒฝ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“Š ๋”•์…”๋„ˆ๋ฆฌ ํ˜•ํƒœ๋กœ ์„ ์–ธํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“Š iplot ์˜ layout๊ณผ ์œ ์‚ฌํ•œ ๋Š๋‚Œ์ด๋ผ๊ณ  ๋ณด์‹œ๋ฉด ๋  ๊ฑฐ ๊ฐ™์Šต๋‹ˆ๋‹ค!!

๐Ÿ“Š ์ธ์ˆ˜

  • title - text, font, size, color, x/y
  • showlegend : True / False- ์ฃผ์„ ํ‘œ์‹œ ์—ฌ๋ถ€
  • xaxis / yaxis : title, showticklabels, dtick, tick0, tickfont
  • autosize : True / False - figure ๊ฐ์ฒด์˜ ํฌ๊ธฐ ์ง€์ •
    • False ์ธ ๊ฒฝ์šฐ - โ€˜heightโ€™ : ~, โ€˜widthโ€™ : ~
  • 'template' : โ€˜template_nameโ€™ - figure๊ฐ์ฒด์˜ template ์ง€์ •

2.2.3. fig.add_annotation( )

๐Ÿ“Š fig.add_annotation( ) ํ•จ์ˆ˜๋ฅผ ๊ฐ€์ง€๊ณ  ๊ทธ๋ž˜ํ”„์—์„œ ๊ฐ•์กฐํ•  ๋ถ€๋ถ„์— annotation์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“Š ๋”•์…”๋„ˆ๋ฆฌ ํ˜•ํƒœ๋กœ ์„ ์–ธํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“Š ์ธ์ˆ˜

  • x / y : ~ - annotation ์ด ๊ธ€์–ด๊ฐˆ ์ง๊ด€์ ์ธ ์œ„์น˜ ์ง€์ • ex) x = โ€˜2020-03-05โ€™, y = 9456
  • text : ~ - annotation ๋‚ด์šฉ
  • font - size, color
  • align : ~ - text ์ •๋ ฌ ์œ„์น˜ ์„ค์ • ex) โ€˜alignโ€™ : โ€˜centerโ€™

  • showarrow : True / False - ํ™”์‚ดํ‘œ ํ‘œ์‹œ ์—ฌ๋ถ€ ์„ค์ •
  • arrowhead : ~ - ํ™”์‚ดํ‘œ ๋จธ๋ฆฌ ์ข…๋ฅ˜ ์ง€์ • ex) โ€˜arrowheadโ€™ : 2
  • arrowsize : ~ - ํ™”์‚ดํ‘œ ๋จธ๋ฆฌ ํฌ๊ธฐ ์ง€์ • ex) โ€˜arrowsizeโ€™ : 1
  • arrowwidth : ~ - ํ™”์‚ดํ‘œ ๋„ˆ๋น„ ์ง€์ • ex) โ€˜arrowwidthโ€™ : 2
  • arrowcolor : ~ - ํ™”์‚ดํ‘œ ์ƒ‰ ์ง€์ •

  • bordercolr : ~ - annotation์˜ ๋ฐ”๊นฅ ์„  ์ƒ‰ ์ง€์ •
  • borderwidth : ~ - ๋ฐ”๊นฅ ์„  ๋„ˆ๋น„ ์ง€์ • ex) โ€˜borderwidthโ€™ : 2
  • borderpad : ~ - text ๊ฐ€ ๋“ค์–ด๊ฐˆ ๊ณต๊ฐ„ ์ง€์ • ex) โ€˜borderpadโ€™ : 7
  • bgcolor : ~ - annotation ๋ฐฐ๊ฒฝ์ƒ‰ ์ง€์ •

  • ax / ay : ~ - ์ง๊ด€์ ์ธ ์œ„์น˜ ๊ธฐ์ค€ annotation์˜ ์„ธ๋ถ€ ์œ„์น˜ ์„ค์ • ex) โ€˜axโ€™ : 20, โ€˜ayโ€™ : -50
    • ax - 0 (๊ฐ€์šด๋ฐ) ๊ธฐ์ค€์œผ๋กœ ์–‘์ˆ˜๋ฉด ์˜ค๋ฅธ์ชฝ, ์Œ์ˆ˜๋ฉด ์™ผ์ชฝ
    • ay - 0 (๊ฐ€์šด๋ฐ) ๊ธฐ์ค€์œผ๋กœ ์–‘์ˆ˜๋ฉด ์•„๋ž˜์ชฝ, ์Œ์ˆ˜๋ฉด ์œ„์ชฝ
  • opacity : ~ - annotation ํˆฌ๋ช…๋„ ์„ค์ •. ์ž‘์„์ˆ˜๋ก ํˆฌ๋ช…ํ•ด์ง ex) โ€˜opacityโ€™ : 0.9

2.2.4. fig.show( )

๐Ÿ“Š fig.show( ) ํ•จ์ˆ˜๋Š” ์ง€๊ธˆ๊นŒ์ง€ ์„ค์ •ํ•œ figure ๊ฐ์ฒด๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.


๐Ÿ“Š ์—ฌ๊ธฐ๊นŒ์ง€ ํ•ด์„œ plotly ์˜ ๊ธฐ๋ณธ ๊ตฌ๋ฌธ์„ ๋ชจ๋‘ ์•Œ์•„๋ณด์•˜์Šต๋‹ˆ๋‹ค. ์ด์ œ ์‹ค์ œ๋กœ๋Š” ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉ๋˜๋Š”์ง€ ์•Œ์•„๋ณด๋„๋ก ํ•ฉ์‹œ๋‹ค๐Ÿ™‚.


2.3. ์ฝ”๋“œ

import plotly.graph_objects as go
import plotly.offline as pyo
pyo.init_notebook_mode()
import plotly.io as pio
fig = go.Figure()
fig.add_trace(
    go.Bar(
        x = Dataframe.index, y = Dataframe['column'], text = Dataframe['column'], marker_colors = colors
    ))

fig.update_layout(
    {
        'title' : {'text':, 'font':{'size':, 'color':}},
        'xaxis' : {'title':, 'font':, 'showticklabels':, 'tick0':, 'dtick':, },
        'yaxis' : {'title':, 'font':, 'showticklabels':, 'tick0':, 'dtick':, },
        
        'showlegend': ,
        
        'autosize' : False,
        'height' : ,
        'width' : ,
        
        'template' :
    })

fig.add_annotation(
    {
        'x': , 'y': ,
        
        'text' : ,
        'font' : {'size' : , 'color' : },
        'align' : 'center',
        
        'showarrow' : True,
        'arrowhead' : 2,
        'arrowsize' : 1,
        'arrowwidth' : 2,
        'arrowcolor' : ,
        
        'bordercolor' : ,
        'borderwidth' : 2,
        'borderpad' : 3,
        'bgcolor' : ,
        
        'ax' : 20, 'ay' : -50,
        'opacity' : 0.9
    })

fig.show()

๐Ÿšฉ (2022.10.25 ์ถ”๊ฐ€) ์ •ํ™•ํ•œ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•์„ ์˜ˆ์‹œ๋ฅผ ํ†ตํ•ด์„œ ์•Œ์•„๋ณด๋„๋ก ํ•ฉ์‹œ๋‹ค!!

fig = go.Figure()

fig.add_trace(
    go.Bar(
    x = density_2013_tot_top10.index, y = density_2013_tot_top10['pop/area'],
    marker_color = colors
    )
)

fig.update_layout(
    {
        'title' : {
            'text' : '<b>Population / Area about total ages in 2013</b>',
            'font' : {'size' : 20},
            'x' : 0.5
            },
        
        'xaxis' : {'title' : {'text' : 'Abbreviation'}, 'showticklabels' : True},
        'yaxis' : {'title' : {'text' : 'pop/area'}, 'showticklabels' : True, 'dtick' : 1000},
        
        'template' : 'plotly_white'
    }
)

fig.add_annotation({
    'x' : "DC",
    'y' : 9550,
    
    'text' : 'pop / area in DC',
    'showarrow' : True,
    'font' : {'size' : 10, 'color' : 'white'},
    
    'align' : 'center',
    'arrowhead' : 2,
    'arrowsize' : 1,
    'arrowwidth' : 2,
    'arrowcolor' : '#04BFAD',
    
    'ax' : 20, 'ay' : -50,
    
    'bordercolor' : '#04BFAD',
    'borderwidth' : 2,
    'borderpad' : 7,
    'bgcolor' : '#F25C5C',
    
    'opacity' : 0.9
})
fig.show()


๐Ÿ“Š fig.add_trace( ) ์˜ marker_colors ์ธ์ˆ˜๋ฅผ ์ž˜ ์„ค์ •ํ•ด ์ฃผ๋ฉด ์œ„์˜ ์˜ˆ์‹œ์ฒ˜๋Ÿผ ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐ๋งŒ ๊ฐ•์กฐํ•˜๋Š” ๊ฒƒ๋„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ ํฌ์ŠคํŒ…์—์„œ ๊ฐ€๋ณ๊ฒŒ ์•Œ์•„๋ณผ ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.


๐Ÿ“Š figure = go.Figure( ) ๋กœ figure ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  fig.add_trace( ) ๋กœ ๊ทธ ์œ„์— ๊ทธ๋ž˜ํ”„๋ฅผ ๊ทธ๋ ค์ค๋‹ˆ๋‹ค. ๊ทธ ํ›„์— fig.update_layout( ) ๊ณผ fig.add_annotation( ) ์„ ๊ฐ€์ง€๊ณ  ์„ธ๋ถ€์ ์ธ ์กฐ์ •์„ ํ•ด์ฃผ๋ฉด ์ด๋ ‡๊ฒŒ ๊น”๋”ํ•˜๊ณ  ์ง๊ด€์ ์ธ ๊ทธ๋ž˜ํ”„๋ฅผ ๊ทธ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค๐Ÿ™ƒ.

๐Ÿ“Š ์•„์ง ์‹œ๊ฐํ™” ๊ฒฝํ—˜์ด ๋ถ€์กฑํ•ด์„œ ๊ฐ ๊ทธ๋ž˜ํ”„ ํ˜•ํƒœ์— ์ต์ˆ™ํ•˜์ง€๋Š” ์•Š์ง€๋งŒ, ์–ด๋–ค ๋ฐ์ดํ„ฐ์— ์–ด๋–ค ๊ทธ๋ž˜ํ”„๊ฐ€ ์ ํ•ฉํ•œ์ง€๋„ ๋ฏธ๋ฆฌ ์•Œ์•„๋‘ฌ์•ผ๊ฒ ์Šต๋‹ˆ๋‹ค๐Ÿƒโ€โ™‚๏ธ


Leave a comment