散布図に個々のタグを配置する方法


214

matplotlibで散布図を作成しようとしていますが、タグをポイントに追加する方法が見つかりませんでした。例えば:

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

「y」のポイントに「ポイント1」、「ポイント2」などのラベルを付けたいのですが、わかりませんでした。

回答:


374

おそらく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()

ここに画像の説明を入力してください


8
それが私が言おうとしていたことです。ドキュメントへのリンク:matplotlib.sourceforge.net/api/...の デモへのリンク:matplotlib.sourceforge.net/examples/pylab_examples/...
ポール

4
@ubuntu ポイントの代わりに数字(またはラベル)を使用することは可能ですか?
Vladtn、2012

@Vladtn:labels変数を再定義することで注釈を変更できます。
unutbu

16
@Vladtn:を省略すると、サークルを削除できplt.scatterます。を使用して、画像に任意のテキストを配置できますplt.annotate(label, xy = (x, y), xytext = (0, 0), textcoords = 'offset points')。通知xytext = (0, 0)はオフセットがないことを意味し、省略するarrowpropsplt.annotate矢印が描かれなくなります。
unutbu

1
@OParker:に変更'point{0}'.format(i)'point{0}'.format(i+1)ます。または、range['point{0}'.format(i) for i in range(N)]をに変更することもできます['point{0}'.format(i) for i in range(1,N+1)]
unutbu
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.