Cách đặt các thẻ riêng lẻ cho một biểu đồ phân tán


214

Tôi đang cố gắng thực hiện một âm mưu phân tán trong matplotlib và tôi không thể tìm ra cách thêm thẻ vào các điểm. Ví dụ:

scatter1=plt.scatter(data1["x"], data1["y"], marker="o",
                     c="blue",
                     facecolors="white",
                     edgecolors="blue")

Tôi muốn các điểm trong "y" có nhãn là "điểm 1", "điểm 2", v.v. Tôi không thể tìm ra nó.

Câu trả lời:


374

Có lẽ sử dụng plt.annotate :

import numpy as np
import matplotlib.pyplot as plt

N = 10
data = np.random.random((N, 4))
labels = ['point{0}'.format(i) for i in range(N)]

plt.subplots_adjust(bottom = 0.1)
plt.scatter(
    data[:, 0], data[:, 1], marker='o', c=data[:, 2], s=data[:, 3] * 1500,
    cmap=plt.get_cmap('Spectral'))

for label, x, y in zip(labels, data[:, 0], data[:, 1]):
    plt.annotate(
        label,
        xy=(x, y), xytext=(-20, 20),
        textcoords='offset points', ha='right', va='bottom',
        bbox=dict(boxstyle='round,pad=0.5', fc='yellow', alpha=0.5),
        arrowprops=dict(arrowstyle = '->', connectionstyle='arc3,rad=0'))

plt.show()

nhập mô tả hình ảnh ở đây


8
Đó là những gì tôi sẽ nói. Liên kết đến tài liệu: matplotlib.sourceforge.net/api/ Từ liên kết đến bản demo: matplotlib.sourceforge.net/examples/pylab_examples/ trộm
Paul

4
@ubfox Có thể sử dụng số (hoặc nhãn) thay vì điểm không?
Vladtn

@Vladtn: Bạn có thể thay đổi các chú thích bằng cách xác định lại labelsbiến.
unutbu

16
@Vladtn: Bạn có thể xóa các vòng tròn bằng cách bỏ qua plt.scatter. Bạn có thể đặt văn bản tùy ý trên hình ảnh bằng cách sử dụng plt.annotate(label, xy = (x, y), xytext = (0, 0), textcoords = 'offset points'). Thông báo xytext = (0, 0)có nghĩa là không có bù, và bỏ qua các arrowpropsnguyên nhân plt.annotateđể không vẽ một mũi tên.
unutbu

1
@OParker: Đổi 'point{0}'.format(i)thành 'point{0}'.format(i+1). Hoặc, bạn có thể thay đổi range: ['point{0}'.format(i) for i in range(N)]thành ['point{0}'.format(i) for i in range(1,N+1)].
unutbu
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.