Matplotlib에서 덴드로그램(dendrogram)의 분기 길이를 조정하려면 SciPy의 계층적 클러스터링 함수와 함께 dendrogram() 메서드를 활용하면 됩니다. 아래에서 단계별로 자세히 살펴보겠습니다.
덴드로그램이란?
덴드로그램은 계층적 군집화(hierarchical clustering) 결과를 나무 형태로 시각화한 그래프입니다. 각 분기(branch)의 길이는 클러스터가 병합되는 거리(비유사성)를 나타내며, 데이터 포인트 간의 유사 관계를 한눈에 파악하는 데 매우 유용합니다.
구현 단계
- 그림(figure) 크기를 설정하고 서브플롯 사이 및 주변의 여백(padding)을 조정합니다.
- 다변량 정규분포(multivariate normal distribution)에서 무작위 샘플 a와 b를 생성합니다.
- concatenate() 메서드를 사용하여 기존 축을 따라 배열들을 연결합니다.
- linkage() 메서드로 계층적/응집형(agglomerative) 클러스터링을 수행합니다.
- figure() 메서드를 사용하여 새 그림을 생성하거나 기존 그림을 활성화합니다.
- 서브플롯 배치의 일부로 그림에 축(axes)을 추가합니다.
- dendrogram() 메서드를 사용하여 계층적 클러스터링 결과를 덴드로그램으로 그립니다.
- show() 메서드를 사용하여 그림을 화면에 표시합니다.
예제 코드
from matplotlib import pyplot as plt from scipy.cluster.hierarchy import dendrogram, linkage import numpy as np plt.rcParams["figure.figsize"] = [7.50, 3.50] plt.rcParams["figure.autolayout"] = True # 다변량 정규분포에서 무작위 샘플 생성 a = np.random.multivariate_normal([0, 10], [[3, 1], [1, 4]], size=[2]) b = np.random.multivariate_normal([0, 10], [[3, 1], [1, 4]], size=[3]) # 배열 연결 X = np.concatenate((a, b), ) # 계층적 클러스터링 수행 Z = linkage(X) # 그림 및 축 생성 후 덴드로그램 그리기 fig = plt.figure() ax = fig.add_subplot(1, 1, 1) dendrogram(Z, ax=ax) plt.show()
실행 결과

위 코드를 실행하면 5개의 데이터 포인트가 병합되는 과정을 보여주는 덴드로그램이 출력됩니다. 각 분기의 세로 길이는 해당 병합 단계에서의 거리 값을 의미하며, 이 값이 클수록 두 클러스터 간의 차이가 크다는 것을 나타냅니다. 필요에 따라 dendrogram() 함수의 color_threshold, above_threshold_color 등의 옵션을 함께 조정하면 분기 표현 방식을 더욱 세밀하게 제어할 수 있습니다.