Python

[python] ๋ฐ์ดํ„ฐ ์‹œ๊ฐํ™” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ Matplotlib

hyonie 2024. 5. 6. 19:47

๋ชฉ์ฐจ

     


    Matplotlib: ํŒŒ์ด์ฌ์˜ ๋ฐ์ดํ„ฐ ์‹œ๊ฐํ™” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

    Matplotlib์€ ํŒŒ์ด์ฌ์—์„œ ๊ฐ€์žฅ ๋Œ€ํ‘œ์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๋ฐ์ดํ„ฐ ์‹œ๊ฐํ™” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํŒจํ‚ค์ง€์ด๋‹ค. ์ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด Line Plot, Bar, chart, Pie chart, Histogram, Box Plot ๋“ฑ ๋‹ค์–‘ํ•œ ์ฐจํŠธ์™€ ์Šคํƒ€์ผ์„ ์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

     

    ์ฝ”๋“œ์—์„œ๋Š” ๋ณดํ†ต `import matplotlib.pyplot as plt` ๋ฅผ ์„ ์–ธํ•˜์—ฌ ์‚ฌ์šฉํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ดํ›„์—๋Š” `plt`๋ฅผ ํ†ตํ•ด ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค. ์ด๋ ‡๊ฒŒ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š” `matplotlib.pyplot`์˜ ๋ฐ˜๋ณต์ ์ธ ํ˜ธ์ถœ์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด์„œ์ด๋‹ค. ๋”ฐ๋ผ์„œ `plt`๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ฝ”๋“œ๊ฐ€ ๊ฐ„๊ฒฐํ•ด์ง€๊ณ  ์‹œ๊ฐํ™” ์ž‘์—…์ด ํŽธ๋ฆฌํ•ด์ง„๋‹ค.

     

     


    Matplotlib ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ค์น˜  - ๋กœ์ปฌ ๐Ÿ’ป

    ๋ฐ์ดํ„ฐ ์‹œ๊ฐํ™”๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ํ•˜๊ธฐ ์œ„ํ•ด ํ•ด๋‹น ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์„ค์น˜ํ•œ๋‹ค.

    pip install matplotlib

     

     


     

    Matplotlib ์‚ฌ์šฉํ•˜๊ธฐ - ์ฝ”๋žฉ ๐Ÿ“Š

    ์ฝ”๋žฉ์—์„œ๋Š” ์ด๋ฏธ ์„ค์น˜๊ฐ€ ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํด๋ผ์šฐ๋“œ ์„ค์น˜๊ฐ€ ํ•„์š”์—†๋‹ค.

     

    ํ•ด๋‹น ์ฝ”๋“œ๋Š” ์‚ฌ๊ณ„์ ˆ๋ณ„ ์ฝ”๋กœ๋‚˜ ํ™•์ง„์ž์ˆ˜๋ฅผ ์‹œ๊ฐํ™”ํ•˜์—ฌ ๊ทธ๋ž˜ํ”„๋กœ ๋‚˜ํƒ€๋‚ธ ๊ฒƒ์ด๋‹ค. ๊ฐ ์‹œ์ฆŒ๋ณ„ ํ™•์ง„์ž ์ˆ˜๊ฐ€ ์–ด๋–ป๊ฒŒ ๋ณ€ํ•˜๋Š”์ง€ ํ•œ๋ˆˆ์— ํŒŒ์•…ํ• ์ˆ˜ ์žˆ๋‹ค.

    import matplotlib.pylab as plt
    
    season = ['spring', 'summer', 'autumn', 'winter']
    corona = [400, 800, 600, 1200]
    
    #plt.plot(season,corona)
    plt.bar(season,corona, width=0.5, color="orange")
    plt.title("Corona status by season")
    plt.xlabel("season")
    plt.ylabel("num of infectee")
    plt.show()

     

    ์ฝ”๋“œ ์„ค๋ช…

    • `import matplotlib.pylab ad plt` : Matplotlib ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋ถˆ๋Ÿฌ์™€์„œ plt๋กœ ๋ณ„์นญ ์ง€์ •. ์ด๋ฅผ ํ†ตํ•ด Matplotlib์˜ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ• ์ˆ˜ ์žˆ๋‹ค.
    • `season = []` : ์‹œ์ฆŒ ์ •๋ณด๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฆฌ์ŠคํŠธ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. x์ถ•์œผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค.
    • `corona=[]` : ์‹œ์ฆŒ๋ณ„ ์ฝ”๋กœ๋‚˜ ํ™•์ง„์ž ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฆฌ์ŠคํŠธ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. y ์ถ•์œผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค.
    • `plt.plot()` : plot ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ x์ถ•์—๋Š” ์‹œ์ฆŒ, y์ถ•์—๋Š” ์ฝ”๋กœ๋‚˜ ํ™•์ง„์ž ์ˆ˜๋ฅผ ์„ค์ •ํ•˜์—ฌ ์„  ๊ทธ๋ž˜ํ”„๋ฅผ ๊ทธ๋ฆฐ๋‹ค.

     

    ๋ฐ์ดํ„ฐ ์‹œ๊ฐํ™” ๊ณ„์ ˆ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๊ทธ๋ž˜ํ”„

     

     

     

    ์œ ์ € ๊ฐ€์ด๋“œ ์‚ฌ์šฉ๋ฒ•

    ์•„๋ž˜ ๋งํฌ ์œ ์ €๊ฐ€์ด๋“œ์— ์‚ฌ์šฉ๋ฐฉ๋ฒ•์ด ์ž์„ธํžˆ ๋‚˜์™€์žˆ๋‹ค ์ฐธ๊ณ !

    https://matplotlib.org/

     

     

     


     

    ๊ฐ๊ฐ์˜ ์ฐจํŠธ๋ฅผ ๋”ฐ๋กœ๋ณด๊ธฐ ๐Ÿ“ˆ

    Matplotlib์˜ plt. Matplotlib(A,B,C) ํ•จ์ˆ˜๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ฐจํŠธ๋ฅผ ํ•˜๋‚˜์˜ ํ™”๋ฉด์— ๋ฐฐ์—ด ํ˜•ํƒœ๋กœ ์ถœ๋ ฅํ•  ๋•Œ ์‚ฌ์šฉ๋œ๋‹ค. ์ดํ•จ์ˆ˜๋Š” ์„ธ๊ฐœ์˜ ์ธ์ž๋ฅผ ๋ฐ›๋Š”๋‹ค.

    plt.subplot(A,B,C)
    • A: ์ „์ฒด ๊ทธ๋ฆผ ์˜์—ญ์„ ํ–‰์œผ๋กœ ๋‚˜๋ˆŒ ๊ฐœ์ˆ˜
    • B: ์ „์ฒด ๊ทธ๋ฆผ ์˜์—ญ์„ ์—ด๋กœ ๋‚˜๋ˆŒ ๊ฐœ์ˆ˜
    • C: ํ˜„์žฌ ๊ทธ๋ฆด ์ฐจํŠธ์˜ ์œ„์น˜๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.

     

    ์˜ˆ๋ฅผ ๋“ค์–ด `plt.subplot(2,2,1)`์€ ์ „์ฒด ๊ทธ๋ฆผ์˜์—ญ์„ 2ํ–‰ 2์—ด๋กœ ๋‚˜๋ˆˆ๋’ค, ํ˜„์žฌ ๊ทธ๋ฆด ์ฐจํŠธ์˜ ์œ„๋ฅผ ์ฒซ๋ฒˆ์งธ๋กœ ์„ค์ •ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ํ˜•ํƒœ๋กœ ์‚ฌ์šฉํ•˜๋ฉด ํ•œ ํ™”๋ฉด์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์„œ๋ธŒ ์ฐจํŠธ๋ฅผ ๋ฐฐ์—ด ํ˜•ํƒœ๋กœ ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ๋‹ค. ์‹œ๊ฐํ™”๋ฅผ ์ถœ๋ ฅํ• ๋–„ ๊ฐ๊ฐ์˜ ์ฐจํŠธ๋ฅผ ๋‹ค๋ฅธ ๋ชจ์–‘์œผ๋กœ ํ• ์ˆ˜ ์žˆ๋‹ค.

    import matplotlib.pylab as plt
    
    season = ['spring', 'summer', 'autumn', 'winter']
    corona = [400, 800, 600, 1200]
    
    plt.subplot(2,1,1)
    plt.plot(season,corona)
    
    
    plt.subplot(2,1,2)
    plt.bar(season,corona, width=0.5, color="orange")
    
    plt.title("Corona status by season")
    plt.xlabel("season")
    plt.ylabel("num of infectee")
    plt.show()

     

    ์ฝ”๋“œ๋กœ ์ถœ๋ ฅ๋œ ๊ทธ๋ž˜ํ”„

     

     


     

    ์—ฐ๋„๋ณ„๋กœ ์„ ๊ทธ๋ž˜ํ”„๋กœ ์‹œ๊ฐํ™” ๐Ÿ“…

    ์œ„ ์ฝ”๋“œ๋Š” ์ถ•๊ตฌ ์„ ์ˆ˜๋“ค์˜ ๋ ˆ์ดํŒ…์„ ์—ฐ๋„๋ณ„๋กœ ์„ ๊ทธ๋ž˜ํ”„๋กœ ์‹œ๊ฐํ™”ํ•˜๋Š” ์˜ˆ์‹œ์ด๋‹ค.

    import matplotlib.pyplot as plt
    
    son = [6.53, 7.14, 6.99, 7.1, 6.15]  #์†ํฅ๋ฏผ ์—ฐ๋„๋ณ„ ๋ ˆ์ดํŒ…
    kane = [7.53,7.68, 7.6, 7.38,7.4]  #ํ•ด๋ฆฌ์ผ€์ธ ์—ฐ๋„๋ณ„ ๋ ˆ์ดํŒ…
    erikson = [7.4, 7.53, 7.4, 7.08, 6.51]  #์—๋ฆญ์„ผ์˜ ์—ฐ๋„๋ณ„ ๋ ˆ์ดํŒ…
    
    year = [2015, 2016, 2017, 2018, 2019 ]
    
    plt.plot(year, erikson, 'g--', label='erikson')
    plt.plot(year, son, 'b-', label='son-heung-min')
    plt.plot(year, kane, 'r:', label='harry kane')
    
    plt.xlim(2014.5, 2019.5)
    plt.ylim(6,8)
    plt.legend(loc =8)
    
    plt.xlabel("year")
    plt.ylabel("rating")
    plt.show()

     

    • ` plt.plot(year, erikson, 'g--', label='erikson') ` : ๊ฐ ์„ ์ˆ˜์˜ ์—ฐ๋„๋ณ„ ๋ ˆ์ดํŒ…์„ ์„  ๊ทธ๋ž˜ํ”„๋กœ ํ‘œํ˜„ํ•œ๋‹ค. g--๋Š” ์ดˆ๋ก์ƒ‰ ์ ์„ , b๋Š” ํŒŒ๋ž€์ƒ‰ ์‹ค์„ , r:์€ ๋นจ๊ฐ„์ƒ‰ ์ ์„ ์„ ์˜๋ฏธํ•œ๋‹ค. lable์„ ํ†ตํ•ด ๊ฐ ์„ ์ˆ˜์˜ ์ด๋ฆ„์„ ํ‘œ์‹œํ•œ๋‹ค.
    • ` plt.xlim(2014.5, 2019.5) ` : x์ถ•์˜ ๋ฒ”์œ„๋ฅผ ์„ค์ •ํ•œ๋‹ค.
    • ` plt.legend(loc =8) ` : ๋ฒ”๋ก€๋ฅผ ํ‘œ์‹œํ•œ๋‹ค. loc๋ฒ”๋ก€์˜ ์œ„์น˜๋ฅผ ์ง€์ •ํ•˜๋Š”๋ฐ 8์€ ํ•˜๋‹จ ์ค‘์•™์„ ์˜๋ฏธํ•œ๋‹ค.

     

    ์ถ•๊ตฌ์„ ์ˆ˜๋“ค์˜ ์—ฐ๋„๋ณ„ ๋ ˆ์ดํŒ…

    ์ด๋ฅผ ํ†ตํ•ด ์†ํฅ๋ฏผ, ํ•ด๋ฆฌ์ผ€์ธ, ์—๋ฆญ์„ผ์˜ ์—ฐ๋„๋ณ„ ๋ ˆ์ดํŒ…์„ ํ•œ๋ˆˆ์— ๋ณผ์ˆ˜ ์žˆ๋‹ค.

     

     

    ์‚ฐ์ •๋„ ๋ถ„ํฌ ํ™•์ธํ•˜๊ธฐ ๐ŸŒ

    ์œ„ ์ฝ”๋“œ๋Š” ์ถ•๊ตฌ ์„ ์ˆ˜๋“ค์˜ ๊ณจ๊ณผ ์–ด์‹œ์ŠคํŠธ๋ฅผ ์‚ฐ์ ๋„(์Šค์บํ„ฐ ํ”Œ๋กฏ)๋กœ ์‹œ๊ฐํ™”ํ•˜๋Š” ์˜ˆ์‹œ์ด๋‹ค.

    import matplotlib.pyplot as plt
    
    goals = [13, 9, 8,4, 3]  #๊ฐ ์„ ์ˆ˜์˜ ๊ณจ์ˆ˜
    assists = [2,9,4,2,0]  #๊ฐ ์„ ์ˆ˜์˜ ์–ด์‹œ์ŠคํŠธ ์ˆ˜
    players = ["kane", "Son","Alli", "erikson", "Moura"]
    
    plt.scatter(goals, assists) #x์ถ•๊ณผy์ถ•์œผ๋กœ ์„ค์ •ํ•˜์—ฌ ์‚ฐ์ ๋„๋ฅผ ๊ทธ๋ฆฐ๋‹ค.
    
    for goal, assist, player in zip(goals, assists, players):
      plt.annotate(player,
                   xy = (goal, assist),
                   xytext = (5,-5),
                   textcoords = "offset points"
                   )
    
    plt.title("players goal and assists")
    plt.xlim(0,15)
    plt.xlabel("Goals")
    plt.ylabel("Assists")
    plt.show()

     

    • ` for goal, assist, player in zip(goals, assists, players) ` : ์„ธ ๊ฐœ์˜ ๋ฆฌ์ŠคํŠธ(goals, assists, players)์—์„œ ๊ฐ๊ฐ์˜ ์š”์†Œ๋ฅผ ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์”ฉ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ์„ ์˜๋ฏธ
      • `zip()` : ํ•จ์ˆ˜๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋™์‹œ์— ๋ฌถ์–ด์ฃผ๋Š” ์—ญํ• ์„ํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, zip([1, 2, 3], ['a', 'b', 'c'])๋Š” [(1, 'a'), (2, 'b'), (3, 'c')]์™€ ๊ฐ™์ด ๊ฐ ๋ฆฌ์ŠคํŠธ์˜ ๊ฐ™์€ ์ธ๋ฑ์Šค์— ์žˆ๋Š” ์š”์†Œ๋“ค์„ ํŠœํ”Œ ํ˜•ํƒœ๋กœ ๋ฌถ์–ด์ค€๋‹ค.
      • goals, assists, players ๋ฆฌ์ŠคํŠธ์˜ ๊ฐ™์€ ์ธ๋ฑ์Šค์— ์žˆ๋Š” ์š”์†Œ๋“ค์„ ํ•œ ๋ฒˆ์— ๊ฐ€์ ธ์™€์„œ goal, assist, player ๋ณ€์ˆ˜์— ์ˆœ์„œ๋Œ€๋กœ ํ• ๋‹นํ•œ๋‹ค.
    • `plt.annotate()`: ๊ทธ๋ž˜ํ”„ ์ƒ์— ์ฃผ์„์„ ์ถ”๊ฐ€ํ•˜๋Š” ํ•จ์ˆ˜์ด๋‹ค. ์ด ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ ์„ ์ˆ˜์˜ ์ด๋ฆ„์„ ํ•ด๋‹น ๊ณจ๊ณผ ์–ด์‹œ์ŠคํŠธ์˜ ์œ„์น˜์— ํ‘œ์‹œํ•œ๋‹ค.
        • textcoords="offset points": ์ฃผ์„ ํ…์ŠคํŠธ์˜ ์œ„์น˜๋ฅผ ํ”ฝ์…€ ๋‹จ์œ„๋กœ ์ง€์ •ํ•จ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.

     

    ์ถ•๊ตฌ ์„ ์ˆ˜๋“ค์˜ ๊ณจ๊ณผ ์–ด์‹œ์ŠคํŠธ๋ฅผ ์‚ฐ์ ๋„