2016-04-26 8 views
0

グリッド上に複数のサブプロットを含むプロットを作成しました。プロットは2つのパラメータが異なるため、座標系で注文したように見えます。matplotlibの図に直接矢印を描く

私は、図のすぐ下のサブプロットの隣にあるmatplotlib.lines.Line2D()を使って線をプロットすることができました。 しかし、私はより明確にするために、行の代わりに矢印を持つことを好むでしょう。 (私はfig.textを使用して、特定のパラメータ値を追加することができます()。)

I'd like the blue lines to be arrows

import matplotlib as mpl 
import matplotlib.pyplot as plt 
import numpy as np 
from itertools import product 

fig = plt.figure() 
plotGrid = mpl.gridspec.GridSpec(2, 2) 

x = np.linspace(0,10,10000) 
y = [j* np.sin(x + i) for i,j in product(range(2), range(1,3))] 

for i in range(4): 
    ax = plt.Subplot(fig, plotGrid[i]) 

    for sp in ax.spines.values(): 
     sp.set_visible(False) 

    ax.plot(x,y[i], color = 'r') 
    ax.set_xticks([]) 
    ax.set_yticks([]) 
    fig.add_subplot(ax) 

all_axes = fig.get_axes() 


#I would like these lines to be arrows 
blcorPosn = 0.08 #bottom corner position 
l1 = mpl.lines.Line2D([blcorPosn,blcorPosn], [1, blcorPosn], 
         transform=fig.transFigure, fig) 

l2 = mpl.lines.Line2D([blcorPosn, 1], [blcorPosn, blcorPosn], 
         transform=fig.transFigure, fig) 

fig.lines.extend([l1, l2]) 

私は、これが移動するための方法であるかはわかりません。しかし、私はこれで一日のように過ごしています。矢印を描くためにこれまで描いてきた唯一の方法は、それらを軸上に直接描くことですが、私が見る限りでは私の選択肢ではありません。

また、これは私の最初の投稿ですので、質問をする方法についてのアドバイスをいただければ幸いです。 ありがとう

+0

http://matplotlib.org/examples/pylab_examples/arrow_simple_demo.html –

+0

多分、もしかしたらあなたを助けることをもう一つ: http://matplotlib.org/users/pyplot_tutorial.html #注釈テキスト – Drachenfels

答えて

0

FancyArrowパッチを少し修正して各軸に沿ってLine2Dを置き換えることができます。主な違いは、起点と目的地x,yの座標が、起点となるx,yx,yの距離に置き換えられていることです。値もないリストとして、直接パラメータとして渡されます。

l1 = mpl.patches.FancyArrow(blcorPosn, blcorPosn, 1, 0, 
          transform=fig.transFigure, figure=fig) 

l2 = mpl.patches.FancyArrow(blcorPosn, blcorPosn, 0, 1, 
          transform=fig.transFigure, figure=fig) 

FancyArrowパッチは、あなたがwidth(線幅のため)、head_widthhead_length含む矢印の外観をカスタマイズできるようにするために、いくつかの他のパラメータを受け付けます。

Figure with axis arrows