Python 蟒蛇膏箭头方向

Python 蟒蛇膏箭头方向,python,python-2.7,matplotlib,annotations,Python,Python 2.7,Matplotlib,Annotations,我试图用Matplotlib在Python 2.7中注释散点图。以下是绘图代码: 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 =

我试图用Matplotlib在Python 2.7中注释散点图。以下是绘图代码:

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)最佳方向或b)从左向右?

plt中。注释(…)
xy
给出要指向的数据的位置(箭头的一端)和
xytext
给出了文本的位置。在代码中,它们是重叠的,因为您为
xy
xytext
指定了相同的位置。请尝试以下方法(例如):


默认情况下,箭头从文本指向数据点。如果要更改箭头的方向,可以使用
arrowprops=dict(arrowstyle='谢谢。因此,关于
xytext=(,)
,如果我尝试使用此
xy=(10,10),xytext=(10-0.1,10-0.1)
,这是否意味着注释文本从
(9.9,9)开始
(0.099,0.099)
?即
xytext=(,)
的单位是什么,以及
xy=(,)
的单位是什么?默认情况下
xycoords
textcoords
应该是
数据。因此,在这种情况下,文本将位于(9.9,9.9)。如果这不是您想要的坐标,您可以更改它(如果你想让你的文本跟随你的数据,
data
似乎是合乎逻辑的选择)。@JulienSpronck我能问你“data”是什么意思吗?我尝试给xytext和xy相同的值,只是为了看看是否有箭头在图表上重叠,但这样做时我会出错。当我设置xytext=0时,图表绘图没有错误,但我没有看到任何箭头。我使用的是ax1。注释(“,xy=(1999,12000000),xytext=(0,0),ARROWSPROPS=dict(arrowstyle=“->”)ax1轴在800000和1900000之间运行。欢迎任何帮助!
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]+0.3), arrowprops=dict(arrowstyle='-|>'), horizontalalignment='center')