我想用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)。如果那不是你想要的坐标,你可以改变它(如果你想让你的文本跟随你的数据,'数据'似乎是合乎逻辑的选择)。 –