Matplotlib散点图,每个数据点有不同的文本

2024-04-19 05:27:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图做一个散点图,并用列表中不同的数字注释数据点。 例如,我想绘制yx的对比图,并用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')

有什么想法吗?


Tags: 数据add列表fig绘制数字axscatter
3条回答

我不知道任何带数组或列表的绘图方法,但是可以在迭代n中的值时使用annotate()

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 website:

enter image description here

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

我试着运行以下代码

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]))

但遇到错误,指出“无法解压缩不可iterable PathCollection对象”,错误特别指向代码行fig,ax=plt.scatter(z,y)

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

plt.scatter(z, y)

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

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

在早于matplotlib 2.0的版本中,ax.scatter不需要打印没有标记的文本。在2.0版中,需要ax.scatter为文本设置适当的范围和标记。

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]))

在这个link中,你可以在3d中找到一个例子

相关问题 更多 >