2017-04-03 9 views
2

計画された注釈ボックスは私のプロットには表示されませんが、私はその座標に対してさまざまな値を試しました。注釈ボックスは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() 

答えて

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"手段を使用するテキストに指示します。

+0

Typo:ha = 'left'。 – swatchai

+0

仲間を仲間に!それを修正しました。 – ImportanceOfBeingErnest

+0

これを行うには、(直接的に) 'transform'を使って、より簡単な方法があります。http://matplotlib.org/users/annotations.html#basic-annotation' textcoords'と 'xycoords'を使用します。 – tacaswell

2

あなたのプロットは「2」(上向き)で終わるのに対し、60の座標「Y」を与えているので、注釈がはるかにあなたのプロット上に表示されています。

変更ここでは第二引数:

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

それは、プロット自体に表示する= 2 <する必要があります。あなたはまた、あなたの行を覆い隠さないように、xの座標を(15から何かに)変更したいかもしれません。

plt.text(5, 1.5, annotation_string, bbox=dict(facecolor='red', alpha=0.5)) 

私(5,1.5)の提案で心配しないでください、私はその後、(あなたの輸入の下に)あなたのスクリプトの先頭に次の行を追加します。

rcParams['legend.loc'] = 'best' 

これが選択されますあなたの伝説のための「ベストフィット」。この場合、左上(注釈のすぐ上)に表示されます。どちらもかなりきれいに見えます:)

関連する問題