Я пытаюсь аннотировать диаграмму рассеяния в Python 2.7 с помощью Matplotlib. Вот код участка:Направление стрелки на питон
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). Вы можете изменить это, если это не ваши желаемые координаты (если вы хотите, чтобы ваш текст соответствовал вашим данным, «данные» кажутся логичным выбором). –