30

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

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を渡してプロパティを設定する」と書かれているということです。

好ましいまたは慣用的な方法は何ですか? メソッド apiはset安定していますか?

4

4 に答える 4

18

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

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

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

matplotlibの推奨API は.set_xxx().

ギャラリーをざっと確認すると、これが確認されます。

編集: 現在、ギャラリーに両方の例があるようです。

関数をプロットするためのキーワード引数にも同様の二重性が存在しますが、命令型 API はそれほど明白ではありません。

于 2012-12-03T13:01:38.077 に答える
9

この質問に対する非常に遅いフォローアップとして:

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

于 2014-12-05T07:08:18.763 に答える
3

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

matplotlib は、setp() (「プロパティの設定」) および 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関数が実際に渡されたオブジェクトの関数を呼び出して、 kwargssetを見つけて設定すると推測しています。

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

私の2セント。

于 2012-11-15T23:38:03.837 に答える