๐Ÿ–ฅ๏ธ[Python] 10-2. Matplotlib ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ (์—ฌ๋Ÿฌ ๊ทธ๋ž˜ํ”„)

thisk336ยท2023๋…„ 10์›” 1์ผ
0

Python

๋ชฉ๋ก ๋ณด๊ธฐ
17/17
post-thumbnail

์„  ๊ทธ๋ž˜ํ”„

  • ์„  ๊ทธ๋ž˜ํ”„๋Š” ์ˆ˜๋Ÿ‰์„ ์ ์œผ๋กœ ํ‘œ์‹œํ•˜๊ณ  ๊ทธ ์ ๋“ค์„ ์„ ๋ถ„์œผ๋กœ ์ด์–ด ๊ทธ๋ฆฐ ๊ทธ๋ž˜ํ”„๋ฅผ ๋งํ•œ๋‹ค.
  • pyplot.plot ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ทธ๋ฆฌ๋ฉฐ, ์ฃผ์š” ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.
    • x, y : x,y ์ถ•์— ๋“ค์–ด๊ฐˆ ๊ฐ’์„ ์˜๋ฏธํ•˜๋ฉฐ, iterableํ•œ ๊ฐ์ฒด์—ฌ์•ผ ํ•œ๋‹ค.
    • linewidth : ์„  ๋‘๊ป˜
    • marker : ๋งˆ์ปค ์ข…๋ฅ˜
    • markersize : ๋งˆ์ปค ํฌ๊ธฐ
    • color : ์„  ์ƒ‰์ƒ
    • linestyle : ์„  ์Šคํƒ€์ผ
    • label : ๋ฒ”๋ก€
# ๊ทธ๋ž˜ํ”„ ๊ธฐ๋ณธ ์„ค์ •
plt.title("๋‚ ์งœ๋ณ„ ์ƒํ’ˆ ํŒ๋งค๋Ÿ‰")
plt.xlabel("๋‚ ์งœ")
plt.ylabel("ํŒ๋งค๋Ÿ‰ (๊ฐœ์ˆ˜)")

# ์›”๋ณ„ ์ผ ์ˆ˜ ๋ˆ„์ ์„ ํ†ตํ•œ ๋งค์›” 1์ผ ์ธ๋ฑ์Šค ์ •์˜ (12์›” ์ œ์™ธ)
xtick_range = np.cumsum([0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30]) 
plt.xticks(xtick_range, df['๋‚ ์งœ'].loc[xtick_range]) 

plt.plot(df['๋‚ ์งœ'], df['์ƒํ’ˆ1'], label = '์ƒํ’ˆ1', color = 'b')
plt.plot(df['๋‚ ์งœ'], df['์ƒํ’ˆ2'], label = '์ƒํ’ˆ2', color = 'g')
plt.plot(df['๋‚ ์งœ'], df['์ƒํ’ˆ3'], label = '์ƒํ’ˆ3', color = 'r')

plt.legend()

  • ๋˜ํ•œ pandas์—์„œ๋„ DataFrame.plot() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด DataFrame์„ ์‚ฌ์šฉํ•œ ๊ทธ๋ž˜ํ”„๋ฅผ ๊ทธ๋ฆด ์ˆ˜ ์žˆ๋‹ค.
# DataFrame์„ ์ด์šฉํ•˜์—ฌ ๊ทธ๋ž˜ํ”„ ๊ทธ๋ฆฌ๊ธฐ
# ๊ทธ๋ž˜ํ”„ ๊ธฐ๋ณธ ์„ค์ •
# ์›”๋ณ„ ์ผ ์ˆ˜ ๋ˆ„์ ์„ ํ†ตํ•œ ๋งค์›” 1์ผ ์ธ๋ฑ์Šค ์ •์˜ (12์›” ์ œ์™ธ)
xtick_range = np.cumsum([0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30])
df.plot(kind = 'line', x = '๋‚ ์งœ', y = ['์ƒํ’ˆ1', '์ƒํ’ˆ2', '์ƒํ’ˆ3'])

plt.title("๋‚ ์งœ๋ณ„ ์ƒํ’ˆ ํŒ๋งค๋Ÿ‰")
plt.xlabel("๋‚ ์งœ")
plt.ylabel("ํŒ๋งค๋Ÿ‰ (๊ฐœ์ˆ˜)")
plt.xticks(xtick_range, df['๋‚ ์งœ'].loc[xtick_range])

์‚ฐ์ ๋„ ๊ทธ๋ž˜ํ”„

  • ์‚ฐ์ ๋„๋Š” ๋‘ ๋ณ€์ˆ˜์˜ ์ƒ๊ด€ ๊ด€๊ณ„๋ฅผ ์ง๊ต ์ขŒํ‘œ๊ณ„์˜ ํ‰๋ฉด์— ์ ์œผ๋กœ ํ‘œํ˜„ํ•˜๋Š” ๊ทธ๋ž˜ํ”„๋ฅผ ๋งํ•œ๋‹ค.
  • pyplot.scatter ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ทธ๋ฆฌ๋ฉฐ, ์ฃผ์š” ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.
    • x, y : x,y ์ถ•์— ๋“ค์–ด๊ฐˆ ๊ฐ’์„ ์˜๋ฏธํ•˜๋ฉฐ, iterableํ•œ ๊ฐ์ฒด์—ฌ์•ผ ํ•œ๋‹ค.
    • marker : ๋งˆ์ปค ์ข…๋ฅ˜
    • markersize : ๋งˆ์ปค ํฌ๊ธฐ
    • color : ๋งˆ์ปค ์ƒ‰์ƒ
    • label : ๋ฒ”๋ก€
# ๊ทธ๋ž˜ํ”„ ๊ธฐ๋ณธ ์„ค์ •
plt.title("๋‚ ์งœ ๋ฐ ๋Œ€๋ฆฌ์ ๋ณ„ ์ถœํ•˜๋Ÿ‰")
plt.xlabel("๋ถ„๊ธฐ")
plt.ylabel("์ถœํ•˜๋Ÿ‰ (๊ฐœ์ˆ˜)")

xtick_range = range(len(grouped_df['๋ถ„๊ธฐ'].unique()))
xtick_label = grouped_df['๋ถ„๊ธฐ'].unique()
plt.xticks(xtick_range, xtick_label)

for agent in grouped_df['๋Œ€๋ฆฌ์ '].unique():
    cond = grouped_df['๋Œ€๋ฆฌ์ '] == agent
    plt.scatter(grouped_df.loc[cond]['๋ถ„๊ธฐ'], grouped_df.loc[cond]['์ˆ˜๋Ÿ‰'], s = 100, marker = '*')

  • ์‚ฐ์ ๋„ ๊ทธ๋ž˜ํ”„ ๋˜ํ•œ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ pandas์—์„œ DataFrame.plot() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด DataFrame์„ ์‚ฌ์šฉํ•œ ๊ทธ๋ž˜ํ”„๋ฅผ ๊ทธ๋ฆด ์ˆ˜ ์žˆ๋‹ค.
pivot_df.plot(kind = 'scatter', x = '๋ถ„๊ธฐ', y = '๋Œ€๋ฆฌ์  1_์ถœํ•˜๋Ÿ‰')
plt.title("๋‚ ์งœ๋ณ„ ์ƒํ’ˆ ํŒ๋งค๋Ÿ‰")
plt.xlabel("๋ถ„๊ธฐ")
plt.ylabel("์ถœํ•˜๋Ÿ‰ (๊ฐœ์ˆ˜)")

xtick_range = range(len(grouped_df['๋ถ„๊ธฐ'].unique()))
xtick_label = grouped_df['๋ถ„๊ธฐ'].unique()

plt.xticks(xtick_range, xtick_label)

๋ง‰๋Œ€ ๊ทธ๋ž˜ํ”„

  • ๋ง‰๋Œ€ ๊ทธ๋ž˜ํ”„๋Š” ๋ฒ”์ฃผ๊ฐ€ ์žˆ๋Š” ๋ฐ์ดํ„ฐ ๊ฐ’์„ ์ง์‚ฌ๊ฐํ˜•์˜ ๋ง‰๋Œ€๋กœ ํ‘œํ˜„ํ•˜๋Š” ๊ทธ๋ž˜ํ”„๋ฅผ ๋งํ•œ๋‹ค.
  • pyplot.bar ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ทธ๋ฆฌ๋ฉฐ, ์ฃผ์š” ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.
    • x: ๋ง‰๋Œ€์˜ ์œ„์น˜
    • height : ๋ง‰๋Œ€์˜ ๋†’์ด
    • width : ๋ง‰๋Œ€์˜ ๋„ˆ๋น„
    • align : ๋ง‰๋Œ€ ์ •๋ ฌ
# ์ œํ’ˆ๊ตฐ๋ณ„ ์ถœํ•˜๋Ÿ‰ ํ•ฉ๊ณ„ ๊ณ„์‚ฐ
plt.title("์ œํ’ˆ๊ตฐ๋ณ„ ์ถœํ•˜๋Ÿ‰ ํ•ฉ๊ณ„")
plt.xlabel("์ œํ’ˆ๊ตฐ")
plt.ylabel("์ถœํ•˜๋Ÿ‰ ํ•ฉ๊ณ„ (๊ฐœ์ˆ˜)")
plt.bar(grouped_df1['์ œํ’ˆ๊ตฐ'], grouped_df1['์ˆ˜๋Ÿ‰'], width = 0.5)

  • ๋ง‰๋Œ€ ๊ทธ๋ž˜ํ”„ ๋˜ํ•œ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ pandas์—์„œ DataFrame.plot() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด DataFrame์„ ์‚ฌ์šฉํ•œ ๊ทธ๋ž˜ํ”„๋ฅผ ๊ทธ๋ฆด ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋‹ค์ค‘ ๋ง‰๋Œ€ ๊ทธ๋ž˜ํ”„๋„ ๊ทธ๋ฆด ์ˆ˜ ์žˆ๋‹ค.
plt.rcParams["figure.figsize"] = (40, 15)
grouped_df2 = df.groupby(['์ œํ’ˆ๊ตฐ', '๋…„๋„(year)'], as_index = True)['์ˆ˜๋Ÿ‰'].sum()

grouped_df2.unstack().plot(kind = 'bar')

ํŒŒ์ด ์ฐจํŠธ

  • ํŒŒ์ด ์ฐจํŠธ๋Š” ๋ฒ”์ฃผ๋ณ„ ๊ตฌ์„ฑ ๋น„์œจ์„ ์›ํ˜•์œผ๋กœ ํ‘œํ˜„ํ•œ ๊ทธ๋ž˜ํ”„๋ฅผ ๋งํ•œ๋‹ค.
  • pyplot.pie ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ทธ๋ฆฌ๋ฉฐ, ์ฃผ์š” ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.
    • x : ๊ฐ pie์˜ ํฌ๊ธฐ
    • label : ๊ฐ pie์— ๋ถ€์ฐฉ๋˜๋Š” ๋ผ๋ฒจ
    • labeldistance : ๋ผ๋ฒจ ๊ฐ„ ๊ฑฐ๋ฆฌ
    • normalize : ๋น„์œจ์„ ๋‚˜ํƒ€๋‚ผ ๊ฒƒ์ธ์ง€ ์—ฌ๋ถ€
    • autopct : ์œ„์— ํ‘œ์‹œ๋  ๊ธ€์ž ํ˜•ํƒœ
    • color : ๋ฐฐ์—ด๋กœ ์„ค์ •ํ•ด์„œ ๊ฐ ํŒŒํŠธ์˜ ์ƒ‰์ƒ์„ ์„ค์ • ๊ฐ€๋Šฅ
plt.title("์ œํ’ˆ๊ตฐ๋ณ„ ์ถœํ•˜๋Ÿ‰ ๋น„์œจ")

plt.pie(x = grouped_df['์ˆ˜๋Ÿ‰'],
        labels = grouped_df['์ œํ’ˆ๊ตฐ'],
       labeldistance = 0.3,
       autopct = '%1.1f%%')

  • ๋ง‰๋Œ€ ๊ทธ๋ž˜ํ”„ ๋˜ํ•œ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ pandas์—์„œ DataFrame.plot() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด DataFrame์„ ์‚ฌ์šฉํ•œ ๊ทธ๋ž˜ํ”„๋ฅผ ๊ทธ๋ฆด ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋‹ค์ค‘ ๋ง‰๋Œ€ ๊ทธ๋ž˜ํ”„๋„ ๊ทธ๋ฆด ์ˆ˜ ์žˆ๋‹ค.
grouped_df.plot(kind = 'pie')

๋ฐ•์Šค ํ”Œ๋กฏ

  • ๋ฐ•์Šค ํ”Œ๋กฏ๋˜๋Š” ๋ฐ•์Šค-์œ„์Šค์ปค ํ”Œ๋กฏ์€ ์ˆ˜์น˜ ๋ฐ์ดํ„ฐ๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ํ•˜๋‚˜์˜ ๋ฐฉ์‹์„ ๋งํ•˜๋ฉฐ, ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฐ•์Šค ํ”Œ๋กฏ์€ ์ „์ฒด ๋ฐ์ดํ„ฐ๋กœ๋ถ€ํ„ฐ ์–ป์–ด์ง„ ์•„๋ž˜์˜ ๋‹ค์„ฏ ๊ฐ€์ง€ ์š”์•ฝ ์ˆ˜์น˜๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๊ทธ๋ ค์ง„๋‹ค.

    • ์ตœ์†Œ๊ฐ’
    • ์ œ 1์‚ฌ๋ถ„์œ„ ์ˆ˜ (Q1)
    • ์ œ 2์‚ฌ๋ถ„์œ„ ์ˆ˜ ๋˜๋Š” ์ค‘์œ„์ˆ˜ (Q2)
    • ์ œ 3์‚ฌ๋ถ„์œ„ ์ˆ˜ (Q3)
    • ์ตœ๋Œ€๊ฐ’
  • pyplot.boxplot ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ทธ๋ฆฌ๋ฉฐ, ์ฃผ์š” ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

    • x : boxplot์„ ๊ทธ๋ฆฌ๊ธฐ ์œ„ํ•œ ๋ฐ์ดํ„ฐ
plt.title("์‡ผํ•‘๋ชฐ ์œ ํ˜•์— ๋”ฐ๋ฅธ ํŒ๋งค๊ธˆ์•ก ๋ถ„ํฌ")
plt.boxplot(X.values)
plt.xticks(np.arange(1, len(X)+1), X.index)

  • ๋ฐ•์Šค ํ”Œ๋กฏ ๋˜ํ•œ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ pandas์—์„œ DataFrame.boxplot() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด DataFrame์„ ์‚ฌ์šฉํ•œ ๊ทธ๋ž˜ํ”„๋ฅผ ๊ทธ๋ฆด ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋‹ค์ค‘ ๋ง‰๋Œ€ ๊ทธ๋ž˜ํ”„๋„ ๊ทธ๋ฆด ์ˆ˜ ์žˆ๋‹ค.
df.boxplot(column = ['์‹คํ—˜1', '์‹คํ—˜2', '์‹คํ—˜3'])

0๊ฐœ์˜ ๋Œ“๊ธ€