计划的注释框没有出现在我的情节中,但是,我已经尝试了各种各样的坐标值。
这有什么问题?!
import numpy as np
from scipy.integrate import odeint
import matplotlib.pyplot as plt
def f(s,t):
a = 0.7
b = 0.8
Iext= 0.5
tau = 12.5
v = s[0]
w = s[1]
dndt = v - np.power(v,3)/3 - w + Iext
dwdt = (v + a - b * w)/tau
return [dndt, dwdt]
t = np.linspace(0,200)
s0=[1,1]
s = odeint(f,s0,t)
plt.plot(t,s[:,0],'b-', linewidth=1.0)
plt.xlabel(r"$t(sec.)$")
plt.ylabel(r"$V (volt)$")
plt.legend([r"$V$"])
annotation_string = r"$I_{ext}=0.5$"
plt.text(15, 60, annotation_string, bbox=dict(facecolor='red', alpha=0.5))
plt.show()
答案 0 :(得分:4)
默认情况下,plt.text
的坐标是数据坐标。这意味着为了存在于图中,它们不应超过图的数据限制(此处,x方向为~0..200,y方向为~2..2)。
像plt.text(10,1.8)
之类的东西应该有用。
问题在于,一旦数据限制发生变化(因为您绘制了不同的图或添加了另一个图),文本项将位于画布内的不同位置。
如果不希望这样,您可以在轴坐标中指定文本(两个方向的范围从0到1)。为了将文本始终放在轴的左上角,与您在那里绘制的内容无关,您可以使用例如。
plt.text(0.03,0.97, annotation_string, bbox=dict(facecolor='red', alpha=0.5),
transform=plt.gca().transAxes, va = "top", ha="left")
此处transform
关键字告诉文本使用Axes坐标,va = "top", ha="left"
表示文本的左上角应该是锚点。
答案 1 :(得分:2)
注释远远高于你的情节,因为你给了一个' y'坐标为60,而你的情节结束于' 2' (向上)。
在此处更改第二个参数:
plt.text(15, 60, annotation_string, bbox=dict(facecolor='red', alpha=0.5))
需要< = 2才能显示在情节本身上。您可能还想更改x coorinate(从15更改为更少),这样它就不会遮挡您的线条。
e.g。
plt.text(5, 1.5, annotation_string, bbox=dict(facecolor='red', alpha=0.5))
不要对我的(5,1.5)建议感到惊慌,然后我会将以下行添加到您的脚本顶部(导入下方):
rcParams['legend.loc'] = 'best'
这将选择最合适的'为你的传奇;在这种情况下,左上角(正好在注释上方)。两者看起来都很整洁,你的选择虽然:)