도표에 호버 주석을 추가하는 방법
산점도의 점에 주석을 추가하는 것은 데이터 작업 시 일반적인 작업입니다. 2D 플롯 생성을 위한 Python 라이브러리인 Matplotlib는 annotate 명령을 사용하여 플롯에 고정 주석을 추가하는 간단한 방법을 제공합니다. 그러나 이 접근 방식은 플롯이 복잡해질 수 있으므로 수많은 데이터 포인트를 처리할 때 실용적이지 않을 수 있습니다.
다행히도 특정 데이터 포인트 위에 커서를 놓을 때만 나타나는 동적 주석을 생성하는 솔루션이 있습니다. 이 방법을 사용하려면 커서 이벤트를 처리하기 위해 콜백 함수와 함께 주석 함수를 약간 수정해야 합니다.
다음은 구현을 보여주는 예제 코드입니다.
import matplotlib.pyplot as plt import numpy as np; np.random.seed(1) x = np.random.rand(15) y = np.random.rand(15) names = np.array(list("ABCDEFGHIJKLMNO")) c = np.random.randint(1, 5, size=15) norm = plt.Normalize(1, 4) cmap = plt.cm.RdYlGn fig, ax = plt.subplots() sc = plt.scatter(x, y, c=c, s=100, cmap=cmap, norm=norm) annot = ax.annotate("", xy=(0, 0), xytext=(20, 20), textcoords="offset points", bbox=dict(boxstyle="round", fc="w"), arrowprops=dict(arrowstyle="->")) annot.set_visible(False) def update_annot(ind): pos = sc.get_offsets()[ind["ind"][0]] annot.xy = pos text = "{}, {}".format(" ".join(list(map(str, ind["ind"]))), " ".join([names[n] for n in ind["ind"]])) annot.set_text(text) annot.get_bbox_patch().set_facecolor(cmap(norm(c[ind["ind"][0]]))) annot.get_bbox_patch().set_alpha(0.4) def hover(event): vis = annot.get_visible() if event.inaxes == ax: cont, ind = sc.contains(event) if cont: update_annot(ind) annot.set_visible(True) fig.canvas.draw_idle() else: if vis: annot.set_visible(False) fig.canvas.draw_idle() fig.canvas.mpl_connect("motion_notify_event", hover) plt.show()
이 코드는 다음과 같은 도구 설명을 추가합니다. 데이터 포인트 위로 마우스를 가져가면 해당 좌표와 이름이 표시됩니다. update_annot 기능은 마우스를 올린 지점에 따라 주석의 위치와 내용을 동적으로 업데이트합니다.
이 접근 방식을 사용하면 각 데이터 포인트에 대한 정보에 쉽게 액세스할 수 있어 깔끔한 시각화가 가능하므로 대화형 데이터 탐색에 적합합니다.
위 내용은 Matplotlib에서 산점도에 대한 호버링 주석을 만드는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!