목차
데이터를 가시화하는 그래프를 그리다 보면 여러 데이터들을 구분해야 하는 경우가 생깁니다. 이럴 경우에는 그래프별 색상을 다르게 표시하게 됩니다. 어떤 경우에는 색상이 아니라 선의 형태를 변경해서 그려야 하는데, 참조선과 같은 경우는 점선으로 종종 표기합니다. matplotlib에서 선 종류를 어떻게 구현하는지 확인해 보도록 하겠습니다.
1. 기호를 이용한 선 종류 지정
선의 종류는 직선. 대시선, 점선, 대시-점선으로 크게 4개로 구분합니다. plt.plot()에서 ' ' 기호 안에 특정 기호를 넣으면 선의 종류를 지정할 수 있습니다.
solid = '-'
dashed = '--'
dotted = ':'
dashdot = '-.'
각 선의 종류를 어떻게 반영하는지 보이기 위해 아래와 같이 예제 코드를 만들었습니다. plot 내에 '-'와 같은 형태로 인자값이 들어갑니다. label은 각 그래프가 어떤 것인지 나타내기 위해 입력된 인자 값이며, 아랫부분에 plt.legend()를 꼭 써야 그래프에 표기가 됩니다. plt.legend() 내의 인자는 legend의 위치와 개수가 몇 개인지 지정해 줍니다.
x축과 y축의 범위를 지정하기 위해 plt.xlim()과 plt.ylim()을 사용했으나 좀 더 간단하게 구성하려면 plt.axis([0.5, 3.5, 0.5, 5])를 사용하면 됩니다.
import matplotlib.pyplot as plt
plt.plot([1, 2, 3], [1, 1, 1], '-', label='solid')
plt.plot([1, 2, 3], [2, 2, 2], '--', label='dashed')
plt.plot([1, 2, 3], [3, 3, 3], ':', label='dotted')
plt.plot([1, 2, 3], [4, 4, 4], '-.', label='dash-dot')
plt.xlim(0.5, 3.5)
plt.ylim(0.5, 5)
plt.legend(loc='upper right', ncol=4)
plt.show()
위의 예제 코드를 실행하면 아래와 같이 그래프가 그려지는 데 각 기호에 따른 선의 형태를 확인하시기 바랍니다.
2. linestyle을 이용한 선 종류 지정
기본적으로 잘 알고 있는 것이 기호를 이용한 것이고, linestyle 인자에 값을 넣어 선의 종류를 지정하는 방법도 같은 결과를 만들어 냅니다.
import matplotlib.pyplot as plt
plt.plot([1, 2, 3], [1, 1, 1], linestyle='solid', label='solid')
plt.plot([1, 2, 3], [2, 2, 2], linestyle='dashed', label='dashed')
plt.plot([1, 2, 3], [3, 3, 3], linestyle='dotted', label='dotted')
plt.plot([1, 2, 3], [4, 4, 4], linestyle='dashdot', label='dash-dot')
plt.title('linestyle을 이용한 선 종류 지정')
plt.xlim(0.5, 3.5)
plt.ylim(0.5, 5)
plt.xlabel('X-Axis')
plt.ylabel('Y-Axis')
plt.legend(loc='upper right', ncol=4)
plt.show()
3. 선의 커스터마이징 (튜플 이용)
matplotlib에서는 기본적으로 인자의 값을 넣어서 선의 종류를 변하게도 하지만 사용자가 원하는 형태로 커스터마이징 할 수 있는 방법도 제공하고 있습니다. linestyle에 이중 튜플을 넣는 방식인데 형태는 아래와 같습니다.
linestyle = (0, (1, 1))
linestyle에 'solid'와 같은 인자 값이 아닌 이중 튜플의 형태인 (0, (1, 1))와 같은 값을 넣는 겁니다. 튜플의 숫자의 개수와 크기에 따라 선의 모양이 달라집니다. 지금까지 보여줬더 4개의 선의 형태를 튜플 값으로 변환하면 다음과 같습니다.
solid = (0, (1, 0))
dashed = (0, (5, 5))
dotted = (0, (1, 1))
dashdot = (0, (3, 5, 1, 5))
위의 튜플을 사용한 코드를 확인해 보겠습니다.
import matplotlib.pyplot as plt
plt.plot([1, 2, 3], [1, 1, 1], linestyle=(0, (1, 0)), label='solid')
plt.plot([1, 2, 3], [2, 2, 2], linestyle=(0, (5, 5)), label='dashed')
plt.plot([1, 2, 3], [3, 3, 3], linestyle=(0, (1, 1)), label='dotted')
plt.plot([1, 2, 3], [4, 4, 4], linestyle=(0, (3, 5, 1, 5)), label='dash-dot')
plt.title('튜플을 이용한 선 종류 지정')
plt.xlim(0.5, 3.5)
plt.ylim(0.5, 5)
plt.xlabel('X-Axis')
plt.ylabel('Y-Axis')
plt.legend(loc='upper right', ncol=4)
plt.show()
4. 커스터마이징의 이해
3번 주제에서 커스터마이징 시 튜플의 숫자를 사용하는 것을 보여 드렸습니다. 이제 숫자가 의미하는 것이 무엇인지 알아보겠습니다.
(A, (B, C))라고 되어 있는 경우 우선 B만큼 길이의 선을 그리고 C만큼 띄우고 다시 B만큼 그리고 C만큼 띄우는 것을 반복하라는 의미입니다. A는 처음 보여줄 선의 위치를 말합니다. 글로 설명을 보면 이해가 잘 안 될 수 있으니 아래 그림을 참고하시기 바랍니다.
이러한 원리를 이용하여 다양한 선을 만들어 낼 수 있습니다. 예를 들어 아래 그래프와 같이 (0, (3, 1, 1, 4, 3))과 같은 선도 그릴 수 있는 거죠
5. 마치며
python matplotlib의 plot() 함수를 사용하여 선을 그릴 때 선의 형태를 지정하는 다양한 방법에 대해서 알아보았습니다. 어떠한 설정도 하지 않으면 그냥 solid 형태의 선이 만들어집니다. 우리가 일반적으로 사용하는 형태입니다. 데이터 분석을 하고 가시화를 할 때 선의 형태를 자유자재로 표현하여 멋진 그래프를 만들어 보세요