Как аннотировать точки данных их значениями в линейной диаграмме python matplotlib? - PullRequest
0 голосов
/ 18 апреля 2019

Я строю линейную диаграмму с категориальными переменными оси x и двумя осями y с непрерывными переменными.Я хочу аннотировать каждую точку данных в каждой строке соответствующими значениями оси y.Следующая таблица показывает, чего я хочу, за исключением того, что красные рукописные цифры - это то, чего мне не хватает сейчас.enter image description here Я пытался аннотировать значение для ax1, которое является основной осью с кодом

for i, txt in enumerate(np.array(aaa_1).reshape(1,3)[0]):
    ax1.annotate(txt, (x_ax[i], np.array(aaa_1).reshape(1,3)[0][i]))

, но я не знаю, как аннотировать остальные строки каквсе они под ax2.

aaa = pd.DataFrame([['a', 100, 1,4], ['b', 478, 3,3], ['c', 700, 9,5]], index=[1, 2, 3],
                  columns=['col a', 'col b', 'col c','col d'])
aaa_1 = aaa.iloc[:,1:2]
qqq_2 = aaa.iloc[:,[2]]
qqq_3 = aaa.iloc[:,[3]]
x_ax = np.array(aaa['col a'])

fig, ax1 = pl.subplots()
ax1.set_xlabel('col a')
ax1.set_ylabel('Value')
lns1= ax1.plot(x_ax, aaa_1, label= 'col b', color = 'C6')
ax1.tick_params(axis='y')
ax1.set_ylim(50,800)

for i, txt in enumerate(np.array(aaa_1).reshape(1,3)[0]):
    ax1.annotate(txt, (x_ax[i], np.array(aaa_1).reshape(1,3)[0][i]))

ax2 = ax1.twinx()

ax2.set_ylabel('Height')  # we already handled the x-label with ax1
lns2 = ax2.plot(x_ax, qqq_2, label= 'col c', color = 'C1')
lns3 = ax2.plot(x_ax, qqq_3, label= 'col d', color = 'C5')
ax2.tick_params(axis='y')
ax2.set_ylim(0,12)


lns = lns1+lns2+lns3
labs = [l.get_label() for l in lns]
ax1.legend(lns, labs, loc=0)


fig.tight_layout()  # otherwise the right y-label is slightly clipped
pl.show()

...