2011-09-23 14 views
60

私はmatplotで開始し、いくつかの基本的なプロットを管理し、今私はそれが難しい私の実際の質問はどのようにある:(matplotlibの - グローバルな伝説とタイトル脇サブプロット

私は今、必要ないくつかのものを行う方法を発見するために見つけてきました

私はさまざまな色のグラフがたくさんあるところ(約200点)、私は何かを書いてみました。 like

def style(i, total): 
    return dict(color=jet(i/total), 
       linestyle=["-", "--", "-.", ":"][i%4], 
       marker=["+", "*", "1", "2", "3", "4", "s"][i%7]) 

fig=plt.figure() 
p0=fig.add_subplot(321) 
for i, y in enumerate(data): 
    p0.plot(x, trans0(y), "-", label=i, **style(i, total)) 
# and more subplots with other transN functions 

(これに関する考えはありますか?)各サブプロット同じスタイル機能を持​​っています。

私はすべてのサブプロットのグローバルタイトルと、すべてのスタイルを説明するグローバルな凡例を取得しようとしています。私は完全にユニークなスタイルを必要としませんが、少なくともいくつかの試みが必要です)

誰かがこの仕事を解決するのに役立つことができますか?

+1

グローバルタイトル:http://matplotlib.sourceforge.net/examples/pylab_examples/newscalarformatter_demo.html –

答えて

112

グローバルタイトル:matplotlibのの新しいリリースでは、1つは、Figure.suptitle()を使用することができます上記のコメントで述べたように

グローバルタイトルが提供されるリンクごとにテキストを追加することで行うことができます。

from pylab import * 
fig = gcf() 
fig.suptitle("Title centered above all subplots", fontsize=14) 
+33

次のようにインポートする人のためにここでOOPスタイルでMWEです: 'import matplotlib.pyplot as plt'、コマンドは単に' plt.figure();と入力することができます。 plt.suptitle( 'タイトルはすべてのサブプロットの中央に位置する'); plt.subplot(231); plt.plot(data [:、0]、data [:、1]);など... –

+0

ありがとうございました。これは実際に選択された回答でなければなりません。 – gustafbstrom

7

凡例のラベルには、以下のようなものを使用できます。 Legendlabelsは保存されたプロットラインです。 modFreqは、プロットラインに対応する実際のラベルの名前です。次に、3番目のパラメータは凡例の場所です。最後に、私がここにいるように議論を引き渡すことができますが、主に最初の3つが必要です。また、plotコマンドでラベルを正しく設定したと仮定します。凡例をlocationパラメータで呼び出すだけで、各行のラベルが見つかります。私は以下のように私自身の伝説を作って運が良かった。他の方法が適切に進まなかったことがないすべてのケースで動作するように見えます。あなたは私に知らせて理解していない場合:

legendLabels = [] 
for i in range(modSize): 
    legendLabels.append(ax.plot(x,hstack((array([0]),actSum[j,semi,i,semi])), color=plotColor[i%8], dashes=dashes[i%4])[0]) #linestyle=dashs[i%4]  
legArgs = dict(title='AM Templates (Hz)',bbox_to_anchor=[.4,1.05],borderpad=0.1,labelspacing=0,handlelength=1.8,handletextpad=0.05,frameon=False,ncol=4, columnspacing=0.02) #ncol,numpoints,columnspacing,title,bbox_transform,prop 
leg = ax.legend(tuple(legendLabels),tuple(modFreq),'upper center',**legArgs) 
leg.get_title().set_fontsize(tick_size) 

またfontsizesや伝説のほぼすべてのパラメータを変更するために、脚を使用することができます。 http://matplotlib.sourceforge.net/examples/pylab_examples/newscalarformatter_demo.html

f.text(0.5,0.975,'The new formatter, default settings',horizontalalignment='center', 
     verticalalignment='top') 
3

suptitle進むべき道だが、それは価値がある何のために、figureは、使用することができますtransFigure性質があります。また、シフトする場合があります

fig=figure(1) 
text(0.5, 0.95, 'test', transform=fig.transFigure, horizontalalignment='center') 
20

orbeckst answer 1に加えて、サブプロットダウン。

import matplotlib.pyplot as plt 

fig = plt.figure() 
st = fig.suptitle("suptitle", fontsize="x-large") 

ax1 = fig.add_subplot(311) 
ax1.plot([1,2,3]) 
ax1.set_title("ax1") 

ax2 = fig.add_subplot(312) 
ax2.plot([1,2,3]) 
ax2.set_title("ax2") 

ax3 = fig.add_subplot(313) 
ax3.plot([1,2,3]) 
ax3.set_title("ax3") 

fig.tight_layout() 

# shift subplots down: 
st.set_y(0.95) 
fig.subplots_adjust(top=0.85) 

fig.savefig("test.png") 

が与える:

enter image description here

関連する問題