[英]Show the final y-axis value of each line with matplotlib
I'm drawing a graph with some lines using matplotlib and I want to display the final y
value next to where each line ends on the right hand side like this:我正在使用 matplotlib 绘制一个带有一些线条的图表,我想在每条线在右侧结束的位置旁边显示最终的
y
值,如下所示:
Any solutions or pointers to the relevant parts of the API? API相关部分的任何解决方案或指针? I'm quite stumped.
我很困惑。
I'm using matplotlib 1.0.0 and the pyplot interface, eg pyplot.plot(xs, ys, f, xs_, ys_, f_)
.我正在使用 matplotlib 1.0.0 和 pyplot 接口,例如
pyplot.plot(xs, ys, f, xs_, ys_, f_)
。
While there's nothing wrong with Ofri's answer, annotate
is intended especially for this purpose:虽然 Ofri 的回答没有错,但
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()
This places the text 8 points to the right of the right side of the axis, at the maximum y-value for each plot.这会将文本 8点放置在轴右侧的右侧,即每个 plot 的最大 y 值处。 You can also add in arrows, etc. See http://matplotlib.sourceforge.net/users/annotations_guide.html (You can also change the vertical alignment, if you want the text vertically centered on the given y-value. Just specify
va='center'
.) You can also add in arrows, etc. See http://matplotlib.sourceforge.net/users/annotations_guide.html (You can also change the vertical alignment, if you want the text vertically centered on the given y-value. Just specify
va='center'
。)
Also, this doesn't rely on tick locations, so it will work perfectly for log plots, etc. Giving the location of the text in terms of the positions of the axis boundaries and its offset in points has a lot of advantages if you start rescaling the plot, etc.此外,这不依赖于刻度位置,因此它非常适用于日志图等。如果您开始,根据轴边界的位置及其偏移量给出文本的位置有很多优势重新调整 plot 等。
Option 1 - pyplot.text选项 1 - pyplot.text
pyplot.text(x, y, string, fontdict=None, withdash=False, **kwargs)
Option 2 - Use a second axes :选项 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
Very useful Joe.非常有用的乔。 Only one more detail.
只有一个细节。 If the final value isn't a maximun, you can use y[-1].
如果最终值不是最大值,则可以使用 y[-1]。 I added a horizontal line to clarify.
我添加了一条水平线来澄清。
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()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.