[英]How do I properly loop through the subplots of a matplotlib figure to show the final y-axis value of each line?
[英]Show the final y-axis value of each line with matplotlib
我正在使用 matplotlib 绘制一个带有一些线条的图表,我想在每条线在右侧结束的位置旁边显示最终的y
值,如下所示:
API相关部分的任何解决方案或指针? 我很困惑。
我正在使用 matplotlib 1.0.0 和 pyplot 接口,例如pyplot.plot(xs, ys, f, xs_, ys_, f_)
。
虽然 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()
这会将文本 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'
。)
此外,这不依赖于刻度位置,因此它非常适用于日志图等。如果您开始,根据轴边界的位置及其偏移量给出文本的位置有很多优势重新调整 plot 等。
选项 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
非常有用的乔。 只有一个细节。 如果最终值不是最大值,则可以使用 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()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.