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は安定していますか?
Pyplotチュートリアル はax.set_xxx()
関数を推奨しているようですが、.setp(xxx=)
についても言及しています。
一方、.set(xxx=)
関数は使用されておらず、.setp(xxx=)
は文書化されていますが、どの例でも使用されていません( Pyplot API )。
Matplotlibが命令型プログラミングスタイルとmatlabのようなスタイルの両方をサポートしていることを理解しています。ターゲットユーザーベースである理由-すでにPythonに精通している人、および以前にMatlabを使用したことがある人。
Matplotlibrecommendedapiは.set_xxx()
であると結論付けます。
gallery を簡単にチェックすると、これが確認されます。
命令型APIがそれほど明白ではないことを除いて、プロット関数へのキーワード引数にも同様の二重性が存在します。
この質問の超最新のフォローアップとして:
ax.set_xlim(4)
とax.set(xlim=4)
は最終的に同じものなので、好きなことをしてください。 ax.set(kwarg=foo)
は、ソースを見ればわかるように、文字列操作を介してax.set_kwarg(foo)
を呼び出します。さまざまなセッター関数もほとんどがワンライナーですが、内省的なsetp
が機能できるようにするために存在します。
私は通常、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セント。
Matplotlibバックエンドでも同様の問題が発生しているため、この投稿に出くわしました。私はmatplotlibがプロットのプロパティに辞書コントロールの使用を可能にすることを望んでいました。 @Chris Zehによる提案を使用すると、次のことができます。
f = {'xlabel': 'x1', 'ylabel': 'x2'}
[setp(ax, formati, formatj) for formati, formatj in f.items()]
これは私の問題を解決します。お役に立てれば。