Pythonとmatplotlib-描画関数の再利用
-
06-07-2019 - |
質問
図のさまざまな部分で動作する複数のpythonスクリプトを使用して、図の生成を効率化することは可能ですか?
たとえば、次の機能がある場合:
FunctionA:何かのヒストグラムを描く
FunctionB:テキストを含むボックスを描画する
FunctionC:何かCのプロットを描く
FunctionD:何かDのプロットを描く
上記の関数を異なるスクリプトで再利用するにはどうすればよいですか?たとえば、何かCのプロットを含むヒストグラムを含む図を作成する場合、何らかの方法でスクリプトからFunctionAとFunctionCを呼び出します。または、2つのプロットを持つ図が必要な場合は、FunctionCとFunctionDを呼び出します。
自分自身を明確に説明しているかどうかはわかりませんが、この質問をする別の方法は次のとおりです:フィギュアオブジェクトを関数に渡し、関数に渡されたフィギュアオブジェクトに何かを描画させてからそれをメインスクリプトに戻し、タイトルなどのその他のものを追加しますか?
解決
ここでは、アーティストオブジェクトを使用し、必要に応じて渡します。関数:
import numpy as np
import matplotlib.pyplot as plt
def myhist(ax, color):
ax.hist(np.log(np.arange(1, 10, .1)), facecolor=color)
def say_something(ax, words):
t = ax.text(.2, 20., words)
make_a_dim_yellow_bbox(t)
def make_a_dim_yellow_bbox(txt):
txt.set_bbox(dict(facecolor='yellow', alpha=.2))
fig = plt.figure()
ax0 = fig.add_subplot(1,2,1)
ax1 = fig.add_subplot(1,2,2)
myhist(ax0, 'blue')
myhist(ax1, 'green')
say_something(ax0, 'this is the blue plot')
say_something(ax1, 'this is the green plot')
plt.show()
他のヒント
オーケー、これを行う方法を見つけました。想像していたよりもずっと簡単でした。 図および axes クラス。
メインスクリプト内:
import pylab as plt
import DrawFns
fig = plt.figure()
(do something with fig)
DrawFns.WriteText(fig, 'Testing')
plt.show()
DrawFns.pyで:
def WriteText(_fig, _text):
[indent]_fig.text(0, 0, _text)
これで終わりです!また、DrawFns.pyに関数を追加して、 import
呼び出しに含まれている限り、任意のスクリプトから呼び出すことができます。 :D
所属していません StackOverflow