Показать окончательное значение оси Y каждой строки с помощью matplotlib - PullRequest
6 голосов
/ 12 июня 2011

Я рисую график с несколькими линиями, используя matplotlib, и я хочу отобразить окончательное значение y рядом с тем, где каждая строка заканчивается с правой стороны, следующим образом: enter image description here

Любые решенияили указатели на соответствующие части API?Я в замешательстве.

Я использую matplotlib 1.0.0 и интерфейс pyplot, например, pyplot.plot(xs, ys, f, xs_, ys_, f_).

Ответы [ 3 ]

14 голосов
/ 12 июня 2011

Хотя с ответом Офри все в порядке, annotate предназначен специально для этой цели:

import matplotlib.pyplot as plt
import numpy as np

x = np.arange(61).astype(np.float)
y1 = np.exp(0.1 * x)
y2 = np.exp(0.09 * x)

plt.plot(x, y1)
plt.plot(x, y2)

for var in (y1, y2):
    plt.annotate('%0.2f' % var.max(), xy=(1, var.max()), xytext=(8, 0), 
                 xycoords=('axes fraction', 'data'), textcoords='offset points')

plt.show()

enter image description here

Это помещает текст 8 точек справа от правой стороны оси с максимальным значением y для каждого графика. Вы также можете добавить стрелки и т. Д. См. http://matplotlib.sourceforge.net/users/annotations_guide.html (Вы также можете изменить вертикальное выравнивание, если вы хотите, чтобы текст располагался по центру по заданному значению y. Просто укажите va='center'.)

Кроме того, это не зависит от местоположения галочек, поэтому оно будет отлично работать для графиков журналов и т. Д. Предоставление местоположения текста с точки зрения положения границ оси и его смещения в точках имеет много преимуществ. если вы начнете изменять масштаб графика и т. д.

4 голосов
/ 12 июня 2011

Опция 1 - pyplot.text

pyplot.text(x, y, string, fontdict=None, withdash=False, **kwargs)

Опция 2 - использовать вторых осей :

second_axes = pyplot.twinx() # create the second axes, sharing x-axis
second_axis.set_yticks([0.2,0.4]) # list of your y values
pyplot.show() # update the figure
1 голос
/ 10 июня 2017

Очень полезный Джо.Только еще одна деталь.Если конечное значение не является максимальным, вы можете использовать y [-1].Я добавил горизонтальную линию для уточнения.

gbm = np.log(np.cumsum(np.random.randn(10000))+10000)
plt.plot(gbm)
plt.annotate('%0.2f' % gbm[-1], xy=(1, gbm[-1]), xytext=(8, 0), 
             xycoords=('axes fraction', 'data'), textcoords='offset points')
plt.axhline(y=gbm[-1], color='y', linestyle='-.')
plt.show()

График с окончательным значением оси Y, отмеченным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...