안녕하세요~ 꽁냥이에요.
이번 포스팅에서는 Matlotlib에서 선 종류를 지정하는 방법에 대해서 알아보려고 합니다.
그래프에서 선은 굉장히 많이 사용되는 요소입니다. 특히 아래 그림처럼 선 그래프에서 많이 사용되지요.
이때 선 종류 잘 이용하면 보는 사람들에게 더 많은 정보를 효율적으로 제공할 수 있지요.
Matplotlib에서 선 종류를 지정하는 방법이 생각보다 많고 앞으로 시각화 내용을 소개할 때 많이 사용할 것 같아서 이번 포스팅을 준비했어요.
이번에 다룰 내용은 다음과 같습니다.
1. 선 종류 지정하기 - 이름으로 지정
먼저 Matplotlib에서 선 종류를 지정하는 기본적인 방법을 알아보겠습니다. Matplotlib에서는 다음과 같이 4가지의 선 종류를 제공하고 있어요.
solid, dashed, dashdot, dotted
그리고 선 종류를 지정하는 방법은 linestyle인자에 위 4가지 선종류 이름을 넣어주는 것입니다.
아래 코드를 실행해보면 이해할 수 있을 거예요.
fig = plt.figure(figsize=(10,2)) ## 캔버스 생성
fig.set_facecolor('white') ## 캔버스 색상 하얀색으로 설정
yticks_coord = [1] ## y축 눈금 좌표
yticks_label = ['solid'] ## y축 눈금 라벨
plt.xticks([]) ## x축 제거
plt.yticks(yticks_coord, yticks_label) ## y축 생성
plt.hlines(y=1,xmin=0,xmax=10,linestyle='solid') ## 수평 직선 생성
plt.show()
위 코드는 수평 직선을 그려주는 코드입니다. 10번째 줄을 보시면 linestyle인자에 'solid'를 넣어준 것을 확인할 수 있어요.
다음으로 4 종류의 선을 모두 확인해보겠습니다. 아래 코드를 실행해주세요.
import matplotlib.pyplot as plt
## 라인 종류 - 이름으로 지정하기
line_type = {'solid line' : 'solid', ## 라인 유형
'dashed line' : 'dashed',
'dash-dotted line' : 'dashdot',
'dotted line' : 'dotted'}
fig = plt.figure(figsize=(10,5)) ## 캔버스 생성
fig.set_facecolor('white') ## 캔버스 색상 하얀색으로 설정
yticks_coord = range(len(line_type)) ## y축 눈금 좌표
yticks_label = list(line_type.keys()) ## y축 눈금 라벨
plt.xticks([]) ## x축 제거
plt.yticks(yticks_coord, yticks_label) ## y축 생성
for i in yticks_coord:
plt.hlines(y=i,xmin=0,xmax=10,linestyle=line_type[yticks_label[i]]) ## 수평 직선 생성
plt.show()
위 코드 line_type 딕셔너리에 4가지 종류의 선을 정의한 뒤(line 4~7), for 루프를 돌면서 linestyle인자에 모든 선 종류를 넣도록 했습니다(line 19).
2. 선 종류 지정하기 - 기호로 지정
선 종류를 지정할 때 이름을 타이핑하는 것이 번거로울 수 있는데요. Matplotlib에서는 선 종류를 좀 더 쉽게 지정하는 방법을 제공하고 있는데요. 바로 기호를 이용하는 방법이지요.
Matplotlib에서 제공하는 기호는 다음과 같아요.
'-', ' --', '-.', ':'
위 4가지 기호의 의미는 아래 표와 같아요.
기호 | 의미 |
'-' | solid |
'--' | dashed |
'-.' | dashdot |
':' | dotted |
의미를 알았으니 이제 그려봐야겠죠? 아래 코드를 실행해주세요.
import matplotlib.pyplot as plt
## 라인 종류 - 이름으로 지정하기
line_type = {'-' : '-', ## 라인 유형
'--' : '--',
'-.' : '-.',
':' : ':'}
fig = plt.figure(figsize=(10,5)) ## 캔버스 생성
fig.set_facecolor('white') ## 캔버스 색상 하얀색으로 설정
yticks_coord = range(len(line_type)) ## y축 눈금 좌표
yticks_label = list(line_type.keys()) ## y축 눈금 라벨
plt.xticks([]) ## x축 제거
plt.yticks(yticks_coord, yticks_label, fontsize=15) ## y축 생성
for i in yticks_coord:
plt.hlines(y=i,xmin=0,xmax=10,linestyle=line_type[yticks_label[i]]) ## 수평 직선 생성
plt.show()
linestyle에 넣어준 인자와 결과를 비교해보세요. 이를 이용하여 각자 상황에 맞는 선 스타일을 고르시면 됩니다~~
3. 선 커스터마이징
만약에 우리가 사용할 수 있는 선 종류가 앞서 배운 4가지 밖에 없다면 뭔가 허전하겠죠?!
Matplotlib은 사용자가 직접 선을 정의할 수 있는 방법도 제공하고 있지요(Matplotlib의 깊은 배려에 감탄이 절로 나오네요).
그 방법은 다음과 같이 이중 튜플로 선 종류를 정의하는 것이지요.
( 숫자0, ( 숫자1, 숫자2 , . . . , 숫자 2*N-1, 숫자 2*N) )
먼저 안 쪽 튜플부터 살펴보겠습니다. 위에서 보시는 것처럼 안쪽 튜플의 원소 개수는 반드시 짝수이어야 하고요. 홀수번째 숫자는 선의 길이를 짝수번째 숫자는 공백 길이를 의미합니다.
따라서 선 + 공백 패턴이 반복되는 것이지요. 아래 그림을 보시면 이해가 되실 거예요.
위 그림을 보시면 첫 번째 숫자인 4는 4포인트 길이의 선을 정의하고요. 두 번째 숫자인 2는 2포인트 길이의 공백을 정의합니다. 또한 세 번째 숫자는 2포인트 길이의 선을 정의하고, 네 번째 숫자인 2는 2포인트 길이의 공백을 정의하지요. Matplotlib은 이러한 패턴을 반복하여 선을 만들어 줍니다.
원리를 이해했으니 그려봐야겠죠? 아래는 4가지 패턴을 정의해서 선을 그려주는 코드입니다. 한번 실행해볼게요.
import matplotlib.pyplot as plt
## 라인 종류 - 튜플
## 라인 유형 설정
line_type_value = [(0,(1,0)), (0,(4.5,1.5)), (0,(3,1,1,1)), (0,(4,2,2,2,1,2))]
line_type_key = [str(x) for x in line_type_value]
line_type = dict(zip(line_type_key,line_type_value))
fig = plt.figure(figsize=(10,5)) ## 캔버스 생성
fig.set_facecolor('white') ## 캔버스 색상 하얀색으로 설정
yticks_coord = range(len(line_type)) ## y축 눈금 좌표
yticks_label = list(line_type.keys()) ## y축 눈금 라벨
plt.xticks([]) ## x축 제거
plt.yticks(yticks_coord, yticks_label) ## y축 생성
for i in yticks_coord:
plt.hlines(y=i,xmin=0,xmax=10,linestyle=line_type[yticks_label[i]]) ## 수평 직선 생성
plt.show()
이제 맨 앞자리 숫자에 대해서 알아볼게요. 맨 앞자리는 패턴의 시작 위치를 알려주는 상수입니다. 다음 그림은 맨 앞자리의 효과를 설명하는 거예요.
위의 그림처럼 맨 앞자리가 3인 경우 3포인트 만큼을 잘라내고 그다음부터 선이 그려지는 것이지요.
아래 코드를 통해서 확인해보겠습니다.
import matplotlib.pyplot as plt
## 라인 종류 - 오프셋 변화
## 라인 유형 설정
line_type_value = [(5,(25,10)), (10,(25,10)), (15,(25,10)), (20,(25,10))]
line_type_key = [str(x) for x in line_type_value]
line_type = dict(zip(line_type_key,line_type_value))
fig = plt.figure(figsize=(10,5)) ## 캔버스 생성
fig.set_facecolor('white') ## 캔버스 색상 하얀색으로 설정
yticks_coord = range(len(line_type)) ## y축 눈금 좌표
yticks_label = list(line_type.keys()) ## y축 눈금 라벨
plt.xticks([]) ## x축 제거
plt.yticks(yticks_coord, yticks_label) ## y축 생성
for i in yticks_coord:
plt.hlines(y=i,xmin=0,xmax=10,linestyle=line_type[yticks_label[i]]) ## 수평 직선 생성
plt.show()
위의 초록색으로 표시한 부분에서 알 수 있듯이 맨 앞자리의 수(5, 10, 15, 20)만큼 그래프가 잘려나가고 나서 선이 그려지는 것을 확인할 수 있어요.
4. 적용하기
지금까지 배운 내용을 먼저 선그래프에 적용해보겠습니다. 아래 코드를 실행해보세요.
import matplotlib.pyplot as plt
## 적용 - 선 그래프
## 데이터 만들기
weekday = ['Mon','Tue','Wed','Thu','Fri','Sat','Sun']
visits = [10,15,9,7,3,10,20]
fig = plt.figure(figsize=(10,10)) ## 캔버스 생성
fig.set_facecolor('white') ## 캔버스 색상 하얀색으로 설정
xticks_coord = range(len(weekday)) ## x축 눈금 좌표
plt.plot(xticks_coord,visits,linestyle=(0,(4,2,2,2))) ## 선 그래프 생성
plt.xticks(xticks_coord,weekday,fontsize=15) ## x축 눈금 생성
plt.yticks([0,5,10,15,20]) ## y축 눈금 생성, 화면에 표시될 눈금값은 0, 5, 10, 15, 20
plt.show()
꽁냥이는 선 종류를 직접 정의하는 방법을 택했어요(line 12). 여러분은 직접 정의하는 방법, 이름과 기호를 이용하는 방법으로 그려보세요.
다음은 바 차트(막대 그래프) 테두리에 적용시켜 볼게요. 아래 코드를 실행해보세요.
import matplotlib.pyplot as plt
## 응용 - 바 차트
## 데이터 만들기
weekday = ['Mon','Tue','Wed','Thu','Fri','Sat','Sun']
visits = [10,15,9,7,3,10,20]
fig = plt.figure(figsize=(10,10)) ## 캔버스 생성
fig.set_facecolor('white') ## 캔버스 색상 하얀색으로 설정
xticks_coord = range(len(weekday)) ## x축 눈금 좌표
plt.bar(xticks_coord,visits,edgecolor = 'k', linestyle='dashed', linewidth=2) ## 선 그래프 생성
plt.xticks(xticks_coord,weekday,fontsize=15) ## x축 눈금 생성
plt.yticks([0,5,10,15,20]) ## y축 눈금 생성, 화면에 표시될 눈금값은 0, 5, 10, 15, 20
plt.show()
이번에는 선 종류를 이름(dashed)으로 지정했고 테두리를 생성하기 위해 edgecolor인자에 검정색을 의미하는 'k'를 넣었습니다(line 12). 위의 그림을 보면 막대기에 점선으로 테두리가 그려진 것을 확인할 수 있어요. 여러분들도 오늘 알려드린 3가지 방법을 각각 적용해 보세요.
지금까지 선 종류를 지정하는 방법에 대해서 알아보았습니다. 선 종류를 잘 활용하시면 더 예쁘고 더 많은 정보를 주는 그래프를 그릴 수 있을 거예요.
궁금하신 점, 내용에 잘못된 부분, 그 밖에 하고 싶은 말은 댓글로 남겨주세요.
지금까지 꽁냥이의 글 읽어주셔서 감사합니다.
이번 포스팅은 아래 자료를 참고했습니다.
Line style : https://matplotlib.org/3.1.0/gallery/lines_bars_and_markers/linestyles.html
'데이터 분석 > 시각화' 카테고리의 다른 글
[범례(Legend)] 1. Matplotlib를 이용한 범례 꾸미기 - 기본 (415) | 2020.07.04 |
---|---|
[선 그래프(Line graph)] 1. Matplotlib을 이용하여 선 그래프 그리기 (398) | 2020.07.02 |
[바 차트(Bar chart)] 5. Matplotlib을 이용하여 스택 바 차트(Stacked bar chart) 그리기 (826) | 2020.06.25 |
[바 차트(Bar chart)] 4. Matplotlib을 이용하여 그룹 바 차트(Grouped bar chart) 그리기 (1690) | 2020.06.22 |
[바 차트(Bar chart)] 3. Matplotlib 바 차트 번외 - 막대에 그라데이션 적용하기 (1100) | 2020.06.14 |
댓글