我正在尝试制作散点图,并从列表中标注不同数字的数据点。 举个例子,我想画出y和x,并用n中对应的数字标注。

y = [2.56422, 3.77284, 3.52623, 3.51468, 3.02199]
z = [0.15, 0.3, 0.45, 0.6, 0.75]
n = [58, 651, 393, 203, 123]
ax = fig.add_subplot(111)
ax1.scatter(z, y, fmt='o')

什么好主意吗?


当前回答

作为一个使用列表理解和numpy的一行程序:

(ax。注释(x [0] (x[1],[2]))的x np.array ([n, z, y]) .T]

设置与Rutger的答案相同。

其他回答

Python 3.6 +:

coordinates = [('a',1,2), ('b',3,4), ('c',5,6)]
for x in coordinates: plt.annotate(x[0], (x[1], x[2]))

当您需要在不同的时间单独注释时(我的意思是,不是在单个for循环中),这可能很有用。

ax = plt.gca()
ax.annotate('your_lable', (x,y)) 

其中x和y是你的目标坐标类型是float/int。

在matplotlib 2.0之前的版本中,ax。在没有标记的情况下,对文本进行分散绘制是不必要的。在2.0版本中,您将需要ax。为文本设置适当的范围和标记。

import matplotlib.pyplot as plt
y = [2.56422, 3.77284, 3.52623, 3.51468, 3.02199]
z = [0.15, 0.3, 0.45, 0.6, 0.75]
n = [58, 651, 393, 203, 123]

fig, ax = plt.subplots()

for i, txt in enumerate(n):
    ax.annotate(txt, (z[i], y[i]))

在这个链接中,你可以找到一个3d的例子。

我不知道任何绘图方法,它接受数组或列表,但你可以使用注释(),而迭代在n的值。

import matplotlib.pyplot as plt
y = [2.56422, 3.77284, 3.52623, 3.51468, 3.02199]
z = [0.15, 0.3, 0.45, 0.6, 0.75]
n = [58, 651, 393, 203, 123]

fig, ax = plt.subplots()
ax.scatter(z, y)

for i, txt in enumerate(n):
    ax.annotate(txt, (z[i], y[i]))

注释()有很多格式化选项,请参阅matplotlib网站:

如果有人试图将上述解决方案应用于.scatter()而不是.subplot(),

我尝试运行以下代码

import matplotlib.pyplot as plt
y = [2.56422, 3.77284, 3.52623, 3.51468, 3.02199]
z = [0.15, 0.3, 0.45, 0.6, 0.75]
n = [58, 651, 393, 203, 123]

fig, ax = plt.scatter(z, y)

for i, txt in enumerate(n):
    ax.annotate(txt, (z[i], y[i]))

但是遇到了“不能解包不可迭代的PathCollection对象”的错误,错误具体指向代码线图,ax = plt。散射(z, y)

我最终用下面的代码解决了这个错误

import matplotlib.pyplot as plt
plt.scatter(z, y)

for i, txt in enumerate(n):
    plt.annotate(txt, (z[i], y[i]))

我没想到.scatter()和.subplot()之间有区别 我早该知道的。