注释框不显示在matplotlib中

注释框不显示在matplotlib中,matplotlib,Matplotlib,“计划注释”框不会出现在我的绘图上,但是,我尝试了大量的坐标值 怎么了 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 +

“计划注释”框不会出现在我的绘图上,但是,我尝试了大量的坐标值

怎么了

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()

注释显示在绘图的上方,因为您已将“y”坐标设为60,而绘图以“2”(向上)结束

在此处更改第二个参数:

plt.text(15, 60, annotation_string, bbox=dict(facecolor='red', alpha=0.5))

它需要到
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
关键字告诉文本使用轴坐标,而
va=“top”,ha=“left”
意味着文本的左上角应该是定位点。

Typo:ha='left'。有一种更简单的方法,不必(直接)这样做使用
transform
使用
textcoords
xycoords
@tacaswell在哪些方面“简单”?使用
annotate
创建类似此处的文本字段需要设置更多参数并键入更多字符。另外(但这可能是我个人的喜好),我可以很容易地记住
ax.transAxes
,而对于提供给
textcoords
xycoords
的字符串,我总是需要查找它的“轴”或“轴分数”或“轴坐标”或任何其他字符串。使用转换有什么缺点吗?我猜这些sting标志只是在内部设置了转换,对吗?
offset*
值对于strait转换来说更为棘手。例如,“右对齐-从轴的右上角顶部对齐文本50像素”很容易用
注释
@tac注释。这是真的,否则需要额外的变换,因此需要导入变换等。顺便说一句,我发现真正令人讨厌的是,你无法操作文本框的边界框,例如,图例的边界框(使用
bbox\u to\u锚定
)。由于文本的FancyBox填充是以fontsize(或奇怪的东西)为单位的,因此始终需要一整套变换步骤来将框与某个东西对齐。
rcParams['legend.loc'] = 'best'
plt.text(0.03,0.97, annotation_string, bbox=dict(facecolor='red', alpha=0.5), 
         transform=plt.gca().transAxes, va = "top", ha="left")