728x90
반응형
728x90

안녕하세요! 오늘은 파이썬으로 하는 시각화 활용 공통 사항에 대해 포스팅 하려고 합니다.

 

어떤 그래프를 그려도, x축/y축/범례/제목 등은 공통적으로 지정해야 하는데요.

해당 부분이 간단해보이더라도, 시각화에서 상당히 중요한 역할을 하는 경우가 있습니다!

그래서 제가 시각화 하면서 활용했던 부분들을 정리해보려고 합니다('. • ᵕ •. `)

 

그래프 예시는 line plot으로 진행할 예정입니다.

line plot에 대한 자세한 내용이 궁금하신 분들은 아래 링크를 참고해주세요:)

https://yhj9855.com/entry/%EC%8B%9C%EA%B0%81%ED%99%94-%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EC%8B%9C%EA%B0%81%ED%99%94-%ED%99%9C%EC%9A%A9-Line-plot

 

[시각화] 파이썬 시각화 활용 - Line plot

안녕하세요! 오늘은 파이썬으로 하는 시각화 활용 Line plot에 대해 포스팅 하려고 합니다.Line plot이란?시간이나 연속적인 값을 나타낼 때 사용되는 그래프로, 일반적인 선 그래프 입니다.보통 x축

yhj9855.com

 

X축, Y축, 제목 설정하기

  • 기본 설정하기

우선 가장 기본적으로 x축, y축, 제목을 설정하는 것부터 시작하겠습니다!

import numpy as np
import matplotlib.pyplot as plt

# 데이터 생성
x = np.linspace(0, 10, 100)
y = np.sin(x)

plt.xlabel("X-axis")
plt.ylabel("Y-axis")
plt.title("Title")
plt.plot(x, y)

  • 위치 변경하기

x축, y축, 제목은 모두 위치를 변경할 수 있습니다.

위치는 두 가지 방법으로 옮길 수 있습니다.

 

1. pad를 사용하여 간격을 조절

import numpy as np
import matplotlib.pyplot as plt

# 데이터 생성
x = np.linspace(0, 10, 100)
y = np.sin(x)

plt.xlabel("X-axis", labelpad=40)
plt.ylabel("Y-axis", labelpad= 30)
plt.title("Title", pad=30)
plt.plot(x, y)

각 축과 제목의 간격이 멀어지신게 보이시나요?

pad 내 숫자가 커질수록 그래프와 축/제목 사이의 간격을 멀게 설정할 수 있습니다.

 

2. 좌표를 설정하여 위치를 조절

제목은 좌표를 설정해서 위치를 조절할 수 있습니다!

축의 경우에도 동일하게 좌표 설정을 할 수 있는데, 좌표대로 잘 움직이지 않아 거의 사용하지 않습니다ㅠㅠ

import numpy as np
import matplotlib.pyplot as plt

# 데이터 생성
x = np.linspace(0, 10, 100)
y = np.sin(x)

fig, ax = plt.subplots(figsize=(6, 4))
# 글씨 크기 조절 가능
plt.xlabel("X-axis", fontsize=14)
plt.ylabel("Y-axis", fontsize=14)
ax.set_title("Title", fontsize=14, x=0.8, y=1.05)
plt.plot(x, y)

제목의 위치가 변경되신게 보이시나요?

x는 좌우의 위치를, y는 상하의 위치를 변경할 수 있습니다!

범례 설정하기

  • 범례란?

범례는 지도나 차트 등에서 참고하라는 뜻으로 나타낸 정보입니다.

파이썬 시각화에서는 보통 각 그래프가 어떤 것을 나타내는지 표기할 때 많이 사용합니다!

 

아래 그래프처럼 노란색과 연두색이 각각 어떤 그래프를 나타내는지 아래쪽에 표기된 것이 범례입니다.

  • 범례 생성하기

보통 범례는 자동으로 생성되는 경우가 많은데, 그래프를 각각 그릴 경우에는 범례가 생성되지 않습니다.

이 때 직접 범례를 설정하는 것도 가능합니다.

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

# 데이터 생성
x = np.linspace(0, 10, 100)
y = np.cos(x)
y1 = np.sin(x)

line1, = plt.plot(x, y, color='lightskyblue')
line2, = plt.plot(x, y1, color='lightcoral')

# 범례 직접 설정
plt.legend(handles=[line1, line2], labels=["Cos(x)", "Sin(x)"])

plt.xlabel("X-axis")
plt.ylabel("Y-axis")
plt.title("Legend Example")

plt.show()

plt.legend(handles=[line1, line2], labels=["Cos(x)", "Sin(x)"]) 여기서 loc = 옵션을 추가하게 되면 범례의 위치를 어느 정도 조정할 수 있습니다!

예를 들어 upper right 옵션으로 하게 되면, 오른쪽 위에 범례가 생성되는데요, 옵션을 정하지 않으면 가장 적당한 위치에 알아서 생성이 됩니다.

  • 위치 변경하기

위의 사진처럼 범례가 자동으로 생성될 때 그래프를 가리는 경우를 자주 접하실 수 있는데요!

이 때 범례 위치를 변경하는 코드는 알아두시면 유용합니다:)

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

# 데이터 생성
x = np.linspace(0, 10, 100)
y = np.cos(x)
y1 = np.sin(x)


line1, = plt.plot(x, y, color='lightskyblue')
line2, = plt.plot(x, y1, color='lightcoral')

# 범례 직접 설정
plt.legend(handles=[line1, line2], labels=["Cos(x)", "Sin(x)"], loc='lower right', bbox_to_anchor=(0.81, 0.03))

plt.xlabel("X-axis")
plt.ylabel("Y-axis")
plt.title("Legend Example")

plt.show()

범례의 위치가 변경된 게 보이시나요?

지금은 예쁘게 옮긴 건 아니지만, 범례를 자유롭게 움직일 수 있는 것은 굉장히 편리하니 잘 사용해주세요!

먼저 loc 옵션을 조정하여 큰 틀의 위치를 정해주시고, bbox_to_anchor 내 좌표로 세세한 위치를 조정해주시면 됩니다:)

한글 설정하기

마지막으로 각 축, 제목, 범례를 한글로 정하는 방법에 대해서 알려드리겠습니다!

보통 한글로 설정을 하게 되면 아래 사진처럼 한글이 깨져서 나오기 때문에 한글 설정이 먼저 필요합니다.

한글 설정을 위해서는 먼저 한글 폰트를 찾아야 합니다.

C:\Windows\Fonts 해당 경로로 가시면, 컴퓨터에 설치되어 있는 폰트를 보실 수 있습니다!

이제 저희가 사용하고 싶은 폰트를 고르면 되는데, 아쉽게도 모든 폰트를 지원하지는 않습니다ㅠㅠ

 

파이썬은 바탕, 굴림, 궁서체 중 골라서 사용하시는게 안전합니다:) (그래도 이것저것 해보시는 걸 추천 드려요)

위의 글씨체 중 하나를 골라 마우스 오른쪽 클릭→속성→이름 복사를 하시면 되는데, 이름은 .ttc 앞까지만 복사해주세요!

※ 만약에 속성이 나타나지 않는다면, 폰트를 더블 클릭해서 들어가신 다음 진행하시면 됩니다.

간혹 HY시리즈는 이름 그대로를 사용하셔야 되는 경우도 있습니다.

예를 들면 HYPost의 경우 HYPost-Medium, HY고딕의 경우 HYGothic-Medium을 사용합니다.

 

이제 아래 코드를 실행하시게 되면 한글 지원이 가능합니다.

plt.rcParams['font.family'] = 'HYPost-Medium'

이제 한글로 잘 보이는 걸 알 수 있습니다!!

하지만 한글로 변경할 때는 종종 숫자의 마이너스가 깨지는 경우가 있어요ㅠㅠ

해당 경우는 마이너스가 지원되는 한글을 써야하는데, 저는 보통 굴림을 사용합니다.

plt.rcParams['font.family'] = 'gulim'

이제 한글과 마이너스가 모두 잘 보이는 것을 확인할 수 있습니다!

 

여기까지 축, 제목, 범례 활용을 정리해보았습니다!

이것저것 쓰다보니 꽤 길어졌는데요, 시각화는 예쁘면 예쁠수록 도움이 되기 때문에 세세한 부분이라도 잘 활용하시면 좋을 것 같습니다:)

특히 한글 설정 같은 경우, 글씨체가 이쁘면 보기도 좋으니 여러 폰트로 한 번 사용해보시길 추천드려요ദ്ദി・ᴗ・)✧

★읽어주셔서 감사합니다★

 

728x90
반응형
728x90
반응형
728x90

 

안녕하세요! 오늘은 파이썬으로 하는 시각화 활용 Line plot에 대해 포스팅 하려고 합니다.

  • Line plot이란?

시간이나 연속적인 값을 나타낼 때 사용되는 그래프로, 일반적인 선 그래프 입니다.

보통 x축에는 연속적인 변수y축에는 수치형 데이터를 배치해서 사용하는 경우가 일반적입니다.

 

저는 보통 식을 그릴 때는 matplotlib, 데이터 프레임이 있는 경우에는 seaborn, matplotlib 두 개를 함께 사용해서 line plot을 그립니다.

matplotlib로 단일 그래프 그리기

우선 먼저 matplotlib를 사용해서 간단한 그래프를 그려보겠습니다.

아래처럼 숫자를 직접 입력하거나, 특정 식이 존재한다면 matplotlib만 사용해서 그리는 것이 간단합니다!

import matplotlib.pyplot as plt

# 왼쪽이 x 값, 오른쪽이 y 값
plt.plot([1, 2, 3, 4], [2, 3, 5, 10])
plt.show()

import numpy as np
import matplotlib.pyplot as plt

# 데이터 생성
x = np.linspace(0, 10, 100)
y = np.sin(x)

plt.plot(x, y)
plt.show()

seaborn을 함께 사용하여 단일 그래프 그리기

seaborn은 데이터 프레임과 호환성이 좋기 때문에 보통 데이터 프레임으로 사용합니다.

import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

# 데이터 생성
x = np.linspace(0, 10, 100)
y = np.cos(x)
df = pd.DataFrame({"X": x, "Y": y})

sns.lineplot(x="X", y="Y", data=df)

그래프 커스텀 하기

사실 그래프를 그리는 것은 정말 간단합니다!

하지만 그래프를 단순히 그리는 것과 이를 커스텀해서 사용하는 것은 정말 큰 차이가 있습니다.

지금부터는 다양하게 그래프를 커스텀하는 방법에 대해 소개해드리겠습니다!

  • 색상 사용하기

그래프에 색상을 입히는 것입니다.

파이썬에서 사용할 수 있는 색상은 아래 포스팅을 참고해주세요!

https://yhj9855.com/entry/%EC%8B%9C%EA%B0%81%ED%99%94-%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EC%8B%9C%EA%B0%81%ED%99%94-%EC%83%89%EC%83%81-%EC%A0%95%EB%A6%AC-Matplotlib-Seaborn

 

[시각화] 파이썬 시각화 색상 정리 (Matplotlib, Seaborn)

안녕하세요! 오늘은 데이터 분석에서 정말 중요한 그래프 색상을 정리하는 포스팅을 진행하도록 하겠습니다. 데이터 분석에서 시각화는 정말 중요한데요.똑같이 데이터 분석을 진행했다고 해

yhj9855.com

 

# matplot
plt.plot(x, y, color='deepskyblue')

# seaborn
sns.lineplot(x="X", y="Y", data=df, color='deeppink')

  • 그래프 동시에 그리기

하나의 영역에 여러 개의 그래프를 그릴 수 있습니다.

그래프가 N개면 N개만큼 그려주면 동일 영역에 그려지는 것을 확인하실 수 있습니다.

# 데이터 생성
x = np.linspace(0, 10, 100)
y = np.cos(x)
y1 = np.sin(x)
df = pd.DataFrame({"X": x, "Y": y})
df1 = pd.DataFrame({"X": x, "Y": y1})

# seaborn
sns.lineplot(x="X", y="Y", data=df, color='lightskyblue')
sns.lineplot(x="X", y="Y", data=df1, color='lightcoral')

# matplotlib
plt.plot(x, y, color='deepskyblue')
plt.plot(x, y1, color='deeppink')

 

seaborn에서는 하나의 데이터 프레임에서 특정 열을 기준으로 두 개의 그래프를 나눌 수 있습니다.

아래 코드를 보시면 Y열이 label을 기준으로 cos그래프와 sin그래프가 나눠져있기 때문에 이를 label로 분리하여, 그래프를 그릴 수 있습니다.

데이터 분석을 하실 때 생각보다 많이 사용되기 때문에 잘 활용하시면 좋습니다!

# 데이터 생성
x = np.linspace(0, 10, 100)
y = np.cos(x)
y1 = np.sin(x)
df1 = pd.DataFrame({"X": x, "Y": y, "label": 'cos'})
df2 = pd.DataFrame({"X": x, "Y": y1, "label":'sin'})

# df1 밑에 df2를 붙이는 작업
df = pd.concat([df1, df2], ignore_index= True)

# 그래프 영역 크기 정하기 (가로/세로)
plt.figure(figsize=(8, 5))
sns.lineplot(x="X", y="Y", data=df, hue='label', palette=['gold', 'limegreen'])

  • 그래프 축/제목/범례 설정

그래프 제목, x축, y축, 범례 등을 직접 지정할 수 있습니다!

축, 제목, 범례를 설정하는 방법 및 한글 설정하는 자세한 과정은 아래 포스팅을 참고해주세요.

https://yhj9855.com/entry/%EC%8B%9C%EA%B0%81%ED%99%94-%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EC%8B%9C%EA%B0%81%ED%99%94-%ED%99%9C%EC%9A%A9-%EB%B2%94%EB%A1%80-%EC%B6%95-%EC%A0%9C%EB%AA%A9-with-%ED%95%9C%EA%B8%80-%EC%A7%80%EC%A0%95

 

[시각화] 파이썬 시각화 활용 - 범례, 축, 제목 (with 한글 지정)

ㄱ안녕하세요! 오늘은 파이썬으로 하는 시각화 활용 공통 사항에 대해 포스팅 하려고 합니다. 어떤 그래프를 그려도, x축/y축/범례/제목 등은 공통적으로 지정해야 하는데요.해당 부분이 간단해

yhj9855.com

 

  • 그래프 마크 설정하기

그래프 내 x 좌표마다 마크를 설정할 수 있습니다.

# 데이터 생성
x = np.linspace(0, 10, 100)
y = np.cos(x)
y1 = np.sin(x)
df = pd.DataFrame({"X": x, "Y": y})
df1 = pd.DataFrame({"X": x, "Y": y1})

plt.figure(figsize=(8, 5))

# seaborn
sns.lineplot(x="X", y="Y", data=df, color='lightskyblue', marker='o')
sns.lineplot(x="X", y="Y", data=df1, color='lightcoral',  marker='*', markersize=9)

# matplotlib
plt.plot(x, y, color='deepskyblue', marker='o', markersize = 4)
plt.plot(x, y1, color='deeppink', marker='^',  markersize = 5)

 

하지만 이렇게 x좌표마다 마크를 설정하는 것이 아닌 특정 좌표마다 마크를 설정하고 싶으실 수도 있습니다.

그럴 때는 그래프 위에 점으로 된 그래프를 하나 더 그리는 방향으로 진행할 수 있습니다!

아래 코드는 5번째마다 그래프 위에 점을 찍는다고 보시면 됩니다.

for문 안에 있는 코드를 변경하시면 원하시는 곳에 마크 표시를 하실 수 있습니다.

# 데이터 생성
x = np.linspace(0, 10, 100)
y = np.cos(x)
y1 = np.sin(x)
df = pd.DataFrame({"X": x, "Y": y})
df1 = pd.DataFrame({"X": x, "Y": y1})

plt.figure(figsize=(8, 5))
sns.lineplot(x="X", y="Y", data=df, color='orange')
sns.lineplot(x="X", y="Y", data=df1, color='limegreen')

for i in range(len(x)) :
    if i%5 == 0 :
        plt.scatter(x[i], y[i], color='darkorange', s=15)
        plt.scatter(x[i], y1[i], color='forestgreen', s=15)

  • 그래프 텍스트 표기하기

그래프 내 텍스트를 표기할 수도 있습니다.

텍스트 표기는 위에 마크 설정하는 것처럼 그래프 위에 텍스트를 하나 더 그리는 방향으로 진행할 수 있습니다.

# 데이터 생성
x = np.linspace(0, 10, 100)
y = np.cos(x)
y1 = np.sin(x)
df = pd.DataFrame({"X": x, "Y": y})
df1 = pd.DataFrame({"X": x, "Y": y1})

plt.figure(figsize=(8, 5))
sns.lineplot(x="X", y="Y", data=df, color='orange')
sns.lineplot(x="X", y="Y", data=df1, color='limegreen')

for i in range(len(x)) :
    if i%5 == 0 :
        plt.scatter(x[i], y[i], color='darkorange', s=15)
        plt.text(x[i]+0.02, y[i]+0.01, f'{y[i]:.1f}', color='darkorange', ha='left', va='bottom', fontsize=8, fontweight='bold')
        plt.scatter(x[i], y1[i], color='forestgreen', s=15)
        plt.text(x[i]+0.05, y1[i]+0.01, f'{y1[i]:.1f}', color='forestgreen', ha='left', va='bottom', fontsize=8, fontweight='bold')
        
plt.xlabel('')
plt.ylabel('')

여기까지 line plot 활용을 정리해보았습니다!

단순히 그래프를 그리는 것 이상으로 활용하는 부분이 정말 생각보다 많았네요ㅠㅠ

그래프가 잘 숙련되시면 아래 같은 그래프를 그리실 수 있습니다.

 

코드에 궁금한 부분이 있으신 분들은 댓글로 남겨주시면, 답변 드리도록 하겠습니다.

★읽어주셔서 감사합니다★

728x90
반응형

+ Recent posts