2012-04-09 13 views
2

私は正当にmatplotlibが提供するコーディングパラダイムと混同しています。私はいくつかのデータをプロットするには、以下のようなコードを使用しています:このmatplotlibプロットルーチンを「修正する」方法はありますか?

fig=plt.figure(figsize=fig_size) # plt=pyplot defined above 
axes1 = fig.add_subplot(111) 
axes1.plot(temp, depth, 'k-') 
axes1.set_ylim(-600,0) 
axes1.set_ylabel(r'Depth $(m)$') 
axes1.set_xlim(0,80) 
axes1.set_xlabel(r'Temperature (\textcelsius)') 
axes1.set_xticks(np.arange(0,100,20)) 
axes1.grid(True) 
plt.savefig(savedir + 'plot.svg', transparent=True) 

私はむしろpylabコンビニエンス機能よりも、MPLのオブジェクト指向のスタイルを使用すると思います。だから私はちょうど1つの曲線を非対話的にプロットしたいのですが、正しいフィギュア作成スタイルを使用していますか? (ライン1 & 2)。軸ラベルなどをフォーマットするには、別々の呼び出しが必要なようです。

+0

あなたはそれがOKに見えるオブジェクト指向のスタイルを使用する場合:参照http://matplotlib.sourceforge.net/私はそれを書くと思います方法の例として、

faq/usage_faq.html#coding-styles – bmu

答えて

3

あなたがしていることは上手く見えます。 (図形作成にはpyplotしか使用しないでください。

数字と軸を1回の呼び出しで行う場合は、plt.subplotsを使用してください。

さらに、plt.savefigの代わりにfig.savefigを使用するのが少し洗練されています。この場合は重要ではありませんが、ステートマシンインタフェースでどの図形が「アクティブ」であるか心配する必要はありません。

最後に、axes1.axis(...)への1回の呼び出しでxとyの制限を設定できます。これは純粋に優先事項です。 set_xlimset_ylimは、間違いなくもっと読みやすい方法です。

"セッター"と "ゲッタ"は迷惑ですが、正しく思い出すと、Pythonにプロパティがないときの日付です。それらは、後方互換性のために部分的にメインメソッドとして保持されており、部分的にplt.setpのような "matlab-isms"は書きやすいようになっています。あなたが望んでいた場合は実際には、これはは、xlabel、ylabelの、およびxticksを設定するために3つの別々の呼び出しを行うために必要がなくなり

plt.setp(ax, xlabel='Xlabel', ylabel='Ylabel', xticks=range(0, 100, 20)) 

行うことができます。しかし、私は個人的にそれを避ける傾向があります。私はほとんどの場合、少し冗長にする方が良いと感じています。あなたがもっと清潔で便利であると思うなら、setpを使うことに何も問題はありません。

import matplotlib.pyplot as plt 
import numpy as np 

depth = np.linspace(-600, 0, 30) 
temp = (4 * np.random.random(depth.size)).cumsum() 

fig, ax = plt.subplots() 
ax.plot(temp, depth, 'k-') 
ax.axis([0, 80, -600, 0]) 
ax.set_ylabel(r'Depth $(m)$') 
ax.set_xlabel(r'Temperature $(^{\circ}C)$') 
ax.set_xticks(np.arange(0, 100, 20)) 
ax.grid(True) 

fig.savefig('plot.svg', transparent=True) 
plt.show() 

enter image description here

+0

申し訳ありません、もう私のコメントを編集できません:私は、tight_layout(http://matplotlib.sourceforge.net/users/tight_layout_guide.html#plotting-guide-tight-layoutなぜなら、私はそれが複数のサブプロットに対して特に有用であり、いくつかの行を節約できると思うからです。 – bmu

+0

@bmu - 'tight_layout'はxticksとは関係ありません。軸ラベル、目盛りラベルなどが重ならないように、サブプロットの位置を調整するだけです。実際、OPが望む軸の範囲を考えると、デフォルトのティックの位置は 'xticks'で指定したものとまったく同じなので、この特定のケースでは省略することができます。 –

+0

あなたは正しい、私の間違い。 xticklabels(位置ではなくラベル)を調整するために、私は 'fig.autofmt_xdate()'を使用します。 'tight_layout'を呼び出すよりも、ほとんどのプロットは、それ以上の '仕事'がなくても良いレイアウトになっています。これについて言及したかっただけで、あなたの答えは私の視点から完全に正しいものです。 – bmu

関連する問題