본문 바로가기
데이터 분석/시각화

[기타] Matplotlib 선 종류(Line style) 지정

by 부자 꽁냥이 2020. 6. 28.

안녕하세요~ 꽁냥이에요.

 

이번 포스팅에서는 Matlotlib에서 선 종류를 지정하는 방법에 대해서 알아보려고 합니다.

 

그래프에서 선은 굉장히 많이 사용되는 요소입니다. 특히 아래 그림처럼 선 그래프에서 많이 사용되지요.

선 그래프 예시

이때 선 종류 잘 이용하면 보는 사람들에게 더 많은 정보를 효율적으로 제공할 수 있지요. 

 

 

Matplotlib에서 선 종류를 지정하는 방법이 생각보다 많고 앞으로 시각화 내용을 소개할 때 많이 사용할 것 같아서 이번 포스팅을 준비했어요. 

 

이번에 다룰 내용은 다음과 같습니다.

 

1. 선 종류 지정하기 - 이름으로 지정

2. 선 종류 지정하기 - 기호로 지정

3. 선 커스터마이징

4. 적용하기

LIST

   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

 

Linestyles — Matplotlib 3.1.0 documentation

Note Click here to download the full example code Linestyles Simple linestyles can be defined using the strings "solid", "dotted", "dashed" or "dashdot". More refined control can be achieved by providing a dash tuple (offset, (on_off_seq)). For example, (0

matplotlib.org


댓글


맨 위로