注释框不会出现在matplotlib中

时间:2017-04-03 03:38:11

标签: 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 + 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()

2 个答案:

答案 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'

这将选择最合适的'为你的传奇;在这种情况下,左上角(正好在注释上方)。两者看起来都很整洁,你的选择虽然:)