web-dev-qa-db-ja.com

matplotlibの図/軸のプロパティを設定するための推奨される方法

axというmatplotlib軸があり、そのプロパティのいくつかを設定したいとします。現在、私はこのようにしています:

ax.set_yscale('log')
ax.set_xlim([0,10])
ax.set_xlabel('some label')

しかし、しばらくすると退屈になります。それから私はこの方法に出くわしました:

ax.set(yscale='log', xlim=[0,10], xlabel='some label')

はるかに簡潔ですが、少し文書化されていないようです。つまり、すべてのドキュメントに「tkstyle setコマンド、パスkwargs to setproperties」と書かれています。

推奨されるまたは慣用的な方法は何ですか? setメソッドAPIは安定していますか?

24
jarondl

Pyplotチュートリアルax.set_xxx()関数を推奨しているようですが、.setp(xxx=)についても言及しています。

一方、.set(xxx=)関数は使用されておらず、.setp(xxx=)は文書化されていますが、どの例でも使用されていません( Pyplot API )。

Matplotlibが命令型プログラミングスタイルとmatlabのようなスタイルの両方をサポートしていることを理解しています。ターゲットユーザーベースである理由-すでにPythonに精通している人、および以前にMatlabを使用したことがある人。

Matplotlibrecommendedapiは.set_xxx()であると結論付けます。

gallery を簡単にチェックすると、これが確認されます。

命令型APIがそれほど明白ではないことを除いて、プロット関数へのキーワード引数にも同様の二重性が存在します。

15
Dima Tisnek

この質問の超最新のフォローアップとして:

ax.set_xlim(4)ax.set(xlim=4)は最終的に同じものなので、好きなことをしてください。 ax.set(kwarg=foo)は、ソースを見ればわかるように、文字列操作を介してax.set_kwarg(foo)を呼び出します。さまざまなセッター関数もほとんどがワンライナーですが、内省的なsetpが機能できるようにするために存在します。

7
Excalabur

私は通常、matplotlibのpyplot(インタラクティブ)インターフェースを使用します。これは、 setp 関数(私は非常に頻繁に使用します)を公開します。

matplotlibは、setp()(「setproperty」)とgetp()を使用して、オブジェクトのプロパティを設定および取得したり、オブジェクトのイントロスペクションを実行したりすることをサポートしています。

これにより、上記のset関数と同じように、パラメータとして設定するオブジェクトを渡すだけで済みます。

>>> x = arange(0,1.0,0.01)
>>> y1 = sin(2*pi*x)
>>> y2 = sin(4*pi*x)
>>> lines = plot(x, y1, x, y2)
>>> setp(lines, linewidth=2, color='r')

setp関数は、渡されたオブジェクトのset関数を実際に呼び出し、kwargsを見つけて設定するように機能すると思います。 。

したがって、私の考えでは、ドキュメントが不足しているにもかかわらず、オブジェクトのsetメソッドは、代わりにkwargsを介して複数のパラメーターを設定するための慣用的なアプローチです。 1行ずつ。

私の2セント。

2
Chris Zeh

Matplotlibバックエンドでも同様の問題が発生しているため、この投稿に出くわしました。私はmatplotlibがプロットのプロパティに辞書コントロールの使用を可能にすることを望んでいました。 @Chris Zehによる提案を使用すると、次のことができます。

f = {'xlabel': 'x1', 'ylabel': 'x2'}
[setp(ax, formati, formatj) for formati, formatj in f.items()]

これは私の問題を解決します。お役に立てれば。

0
cvanelteren