簡體   English   中英

使用matplotlib繪制文本

[英]Using matplotlib to plot text

我正在嘗試將文本放在圖形中,但是由於某些原因,我無法使用plt.text做到這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)

您正在嘗試以向量化方式使用plt.text 這樣就行不通了。 您還向x (列表)添加了0.1 (浮點數),因此產生了不言自明的錯誤。 您必須遍歷“ 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)

在此處輸入圖片說明

您的代碼中有兩個錯誤。

提出的一個問題是您嘗試向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)

請仔細閱讀您的錯誤,並在下次發布完整內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM