我想用Matplotlib註釋Python 2.7中的散點圖。這裏是劇情代碼:Python箭頭方向
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
df = pd.DataFrame(np.random.rand(5,3), columns=list('ABC'))
df.insert(0,'Annotation_Text',['ABC','DEF','GHI','JKL','mnop'])
q = 2
pqr = 1
# Scatter Plot:
x = df['A']
y = df.iloc[:,q]
plt.scatter(x, y, marker='o', label = df.columns.tolist()[q])
# Plot annotation:
plt.annotate(df.iloc[pqr,0]+', (%.2f, %.2f)' % (x.ix[pqr],y.ix[pqr]), xy=(x.ix[pqr], y.ix[pqr]), xycoords='data', xytext = (x.ix[pqr], y.ix[pqr]), textcoords='offset points', arrowprops=dict(arrowstyle='-|>'))
# Axes title/legend:
plt.xlabel('xlabel', fontsize=18)
plt.ylabel('ylabel', fontsize=16)
plt.legend(scatterpoints = 1)
plt.show()
正如您所看到的,主線是以plt.annotate(df.iloc[pqr,0]+', (%...............
開頭的行。
我認爲主要問題是plt.annotate()
行的這一部分:xytext = (x.ix[pqr], y.ix[pqr]), textcoords='offset points', arrowprops=dict(arrowstyle='-|>')
。從這裏開始,xytext = (x.ix[pqr], y.ix[pqr])
只是要註釋的數據點的x和y座標的元組。不幸的是,這是將註釋放在數據點上,這是我不想要的。我想在數據點和註釋文本之間留下一些空白區域。
此外,我遇到了此線正在生成的箭頭和註釋問題。見下文。
問題:
- 目前,註釋文字重疊的箭頭。註釋文本太靠近數據點。我不希望它如此接近。
- 此外箭頭指向從右到左。我不認爲我要求它從右到左繪製箭頭,所以我不知道它爲什麼在這個方向上繪製箭頭。
有沒有辦法控制文本註釋,以便沒有重疊的數據點?另外,如何將箭頭方向從右到左更改爲a)best
方向或b)從左到右?
謝謝。那麼,關於'xytext =(,)',如果我嘗試這個'xy =(10,10),xytext =(10-0.1,10-0.1)',這是否意味着註釋文本從'(9.9, 9.9)'或'(0.099,0.099)'? .i.e。 xytext =(,)'的單位是什麼,'xy =(,)'的單位是多少? –
默認情況下'xycoords'和'textcoords'應該是'data'。所以,在這種情況下,文本將在(9.9,9.9)。如果那不是你想要的座標,你可以改變它(如果你想讓你的文本跟隨你的數據,'數據'似乎是合乎邏輯的選擇)。 –