2009-09-11 42 views
11

私はこのquestionへのフォローアップの質問があります。matplotlibを使用したPython - 描画関数の再利用

図のさまざまな部分で動作する複数のpythonスクリプトを使用することで、図の生成を簡素化できますか?例えば

、私は次のような機能がある場合:

関数A:それにはテキストでボックスを描画し
FunctionC:何かのプロットを描画C
何か
関数Bのヒストグラムを描画します FunctionD:何かのプロットを描くD

上記の関数を別のスクリプトで再利用するにはどうすればよいですか?例えば、何かCのプロットでヒストグラムを使ってFigureを作成したいのであれば、私は何とかスクリプトからFunctionAとFunctionCを呼び出します。あるいは、私が2つのプロットで図を望むなら、私はFunctionCとFunctionDを呼ぶだろう。

私は自分自身をはっきりと説明しているかどうかは分かりませんが、この質問をする別の方法は次のとおりです。Figureオブジェクトを関数に渡して、関数が渡されたFigureオブジェクトタイトルや何かのようなものを追加するためにメインスクリプトに戻しますか?

答えて

8

あなたがArtist objectsを使用し、機能するために、必要に応じてそれらを渡したい:

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() 

alt text http://i28.tinypic.com/2i6f7f5.png

+0

@ tom10 - ありがとう!どのようにコードを書式設定しますか? – aspade

+0

あなたは大歓迎です!コードを書式設定するには、コードブロック全体を4つの余分なスペースでインデントし、コード内でタブの代わりにスペースを使用します。 – tom10

+0

なぜ、 'myhist()'と 'say_something()'が 'ax'を外側の名前空間に戻さなければならないのですか? – crypdick

0

私はこれを行う方法を理解しました。私が想像していたよりずっと簡単でした。ちょうどfigureaxesのクラスを持つ少しの読書hereが必要でした。あなたのDrawFns.pyで

import pylab as plt 
import DrawFns 
fig = plt.figure() 
(do something with fig) 
DrawFns.WriteText(fig, 'Testing') 
plt.show() 

:あなたのメインスクリプトで

def WriteText(_fig, _text): 
[indent]_fig.text(0, 0, _text) 

そして、それはそれです!また、DrawFns.pyにもっと多くの関数を追加して、import呼び出しに含まれていれば、どのスクリプトからでも呼び出すことができます。 :Dここ

+0

一般的に数字が1つの以上の軸が含まれている以外これは、正しい考えで、アクションの大部分は、Axesメソッドを呼び出してプロットを作成することにあります。そのため、Figureを作成してAxesを作成し、Axes(またはその中のオブジェクト)を関数に渡す方が簡単です。例については私の答えを見てください。 – tom10

+0

申し訳ありませんが、私はこれを見ました。先端に感謝します。それに応じてコードを変更します(オフライン)。ありがとうございました! – aspade

関連する問題