본문 바로가기

데이터시각화

matplotlib 을 이용한 선 그래프 그리기(축숨기기, y값출력)

 matplotlib 을 이용한 선 그래프를 그리고 색상과 마커지정을 해 보았다.

그래프를 보다 보면 아쉬운 부분들이 있어서

보다 보기 좋게 꾸며 보려고 한다. 

 

이전 포스팅은 아래 링크에서 확인 할 수 있으며 

마커지정한 부분 까지는 이전 그래프 그리는 방법과 데이터를 그대로 활용 할 예정이다. 

 

https://dioyong.tistory.com/26

 

matplotlib 을 이용한 선 그래프 그리기(선굵기, 선색상, 마커지정)

이전 포스팅 에서 matplotlib 을 이용해 기본적인 선 그래프를 그려 보았다. 그대로 활용 하기에는 미흡한 점이 많아 선 그래프의 선 색이나 두깨 등을 변경 해서 보다 보기 좋게 꾸미는 방법에 대

dioyong.tistory.com

 

1. 제목, x y축 간격 조정 및 축 숨기기 

- 제목, xy 축 간격 조정 

그래프를 보면 제목과 그래프 간격이 너무 붙어 있고 x,y 축 레이블도 마찬가지로 붙어 있어

이 간격을 떨어 트리고자 한다.

캡쳐한 이미지를 보면 차이를 확인 할 수 있다. 

fig = plt.figure(figsize=(9,5))
ax = fig.add_subplot()
# pad값을 주어서 간격을 조정할 수 있다 수치가 크면 제목과 그래프의 간격이 멀어 진다.
plt.title('2022 매출액 ', pad=20, color='purple', fontsize=20)
# labelpad값을 주어서 간격을 조정할 수 있다 수치가 크면 텍스트와 그래프 와의 간격이 멀어 진다.
plt.xlabel('월', color='b',fontsize=12, labelpad=10)
plt.ylabel('매출', color='b',fontsize=12, labelpad=10)
plt.grid(alpha=0.5)
plt.plot(df['date'], df['sales'], marker='o', ms='8', mec='r', mew='2', mfc='w')

 

- 그래프 축 숨기기

그래프의 위쪽과 오른쪽 부분 축이 답답해 보여서 이 부분을 안보이도록 hidden 처리하려 한다.

# 그래프를 그릴수 있는 figure 을 만들어 준다. (큰 종이를 만들어 주는것과 비슷한듯하다.)
fig = plt.figure(figsize=(9,5))
# fig에 사용할 그래프 하나를 추가한다. 여러개를 추가 할 수도 있다.
ax = fig.add_subplot()
# 오른쪽 축 숨기기
ax.spines['right'].set_visible(False)
# 위쪽 축 숨기기
ax.spines['top'].set_visible(False)
# 아래 축 숨김
# ax.spines['bottom'].set_visible(False)
# 왼쪽 축 숨김
# ax.spines['left'].set_visible(False)
plt.title('2022 매출액 ', pad=40, color='purple', fontsize=20)
plt.xlabel('월', color='b',fontsize=12, labelpad=10)
plt.ylabel('매출', color='b',fontsize=12, labelpad=10)
plt.grid(alpha=0.5)
plt.plot(df['date'], df['sales'], marker='o', ms='8', mec='r', mew='2', mfc='w')

 

y축 값 표시 

그래프로 보면 월별 매출액이 증가 하고 있다는 것을 알 수 있다. 

그래프에 매출액 수치도 표시 되면 더 좋을것 같아 월별 매출액 값을  text 를 이용해서 표시 하려 한다. 

fig = plt.figure(figsize=(9,5))
ax = fig.add_subplot()
# 오른쪽 축 숨기기
ax.spines['right'].set_visible(False)
# 위쪽 축 숨기기
ax.spines['top'].set_visible(False)
# text 함수를 이용해서 그래프에 300을 출력해 보았다.
# text(x좌표, y좌표, 출력할내용)
ax.text(0,300, '300')
plt.title('2022 매출액 ', pad=40, color='purple', fontsize=20)
plt.xlabel('월', color='b',fontsize=12, labelpad=10)
plt.ylabel('매출', color='b',fontsize=12, labelpad=10)
plt.grid(alpha=0.5)
plt.plot(df['date'], df['sales'], marker='o', ms='8', mec='r', mew='2', mfc='w')

 

그림과 같이 출력 된 것을  확인 할 수 있다. 

마커와 겹쳐 알아 보기 힘들고 오른쪽으로 정렬이 되어 있어

아래와 같이 이 부분을 수정해 보았다.

fig = plt.figure(figsize=(9,5))
ax = fig.add_subplot()
# 오른쪽 축 숨기기
ax.spines['right'].set_visible(False)
# 위쪽 축 숨기기
ax.spines['top'].set_visible(False)
# y축 값을 증가해 위치를 변경 하였고 정렬 방식을 center 로 하였다.
ax.text(0,330, '300', ha='center')
plt.title('2022 매출액 ', pad=40, color='purple', fontsize=20)
plt.xlabel('월', color='b',fontsize=12, labelpad=10)
plt.ylabel('매출', color='b',fontsize=12, labelpad=10)
plt.grid(alpha=0.5)
plt.plot(df['date'], df['sales'], marker='o', ms='8', mec='r', mew='2', mfc='w')

 

이제 이걸 12번 반복해서 출력해 주면 된다. 

그래프를 변수에 담고 변수의 값을 x, y 좌표로 지정하고 y 값을 출력해 주면 된다. 

(df 의 값을 이용해서 x, y 좌표를 지정 해서 sales 값으로 text 를 출력해 주어도 될것 같다.)

# 그림이 그려지는 캔버스를 만들어 준다.
fig = plt.figure(figsize=(9,5))
ax = fig.add_subplot()
ax.spines['right'].set_visible(False)
ax.spines['top'].set_visible(False)
line_text = ax.plot(df['date'], df['sales'], marker='o', ms='8', mec='r', mew='2', mfc='w')
line_text = line_text[0]
for xytext in list(line_text.get_xydata()):
ax.text(xytext[0],xytext[1]+50, int(xytext[1]), fontsize=15, ha='center')
plt.title('2022 매출액 ', pad=20, color='purple', fontsize=20)
plt.xlabel('월', color='b',fontsize=12, labelpad=10)
plt.ylabel('매출', color='b',fontsize=12, labelpad=10)
plt.grid(alpha=0.5)
plt.show()

아래 이전 내용에서 만들 그래프와 비교해서 수정 하기 전과 비교해서 바뀐 부분 들을 확인 할 수 있다.