使用matplotlib绘制文本

时间:2018-09-25 11:32:20

标签: python matplotlib

我正在尝试在图形中放置文本,但是由于某些原因,我无法使用plt.text来完成文本。我知道了

TypeError: can only concatenate list ("not float") to list

我真的不知道该进行哪些更改才能使其正常工作。

x = [3, 1, 4, 5, 1]
y = [5, 4, 4, 3, 7]

fig=plt.figure(1)
ax = fig.add_subplot(1, 1, 1)
plt.xlim(0.5, 7)
plt.ylim(0, 7.5)

ax.spines['left'].set_position('center')
ax.spines['bottom'].set_position('center')

ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')

ax.xaxis.set_ticks_position('bottom')
ax.yaxis.set_ticks_position('left')

plt.scatter(x, y, marker="x", color="red")

Names=['name1', 'name2', 'name3', 'name4', 'name4']

plt.text(x + 0.1, y + 0.1, Names, fontsize=9)

2 个答案:

答案 0 :(得分:2)

您正在尝试以向量化方式使用plt.text。这样就行不通了。您还将0.1(浮点数)添加到x(列表)中,因此产生了不言自明的错误。您必须遍历Names并使用相应的xy值,并且一次将text放在一个名字上。您可以使用enumerate进行以下操作

Names=['name1', 'name2','name3','name4','name4']
for i, name in enumerate(Names):
    plt.text(x[i]+0.1, y[i]+0.1, name, fontsize=9)

enter image description here

答案 1 :(得分:0)

您的代码中有两个错误。

引发的一个问题是您尝试向Python列表中添加标量:x + 0.1y + 0.1+被定义为串联,这就是错误告诉您的内容。您可以通过提前将xy转换为numpy数组来解决此问题。正如您所期望的,对于数组,+被定义为逐元素加法。但是,这不能解决您的第二个问题。

pyplot.text的文档明确指出xy输入是标量:每个调用只能绘制一个字符串。这意味着您需要一个循环:

for x_, y_, name in zip(x, y, Names):
    plt.text(x_ + 0.1, y_ + 0.1, name, fontsize=9)

请仔细阅读您的错误,并在下一次发布整个内容。