2009-09-11 27 views
11

Bu question için bir takip sorum var.Python - yeniden çizim fonksiyonları

o rakamın farklı bölümleri üzerinde çalışan birden çok piton komut alarak figür nesil düzene mümkün mü? Örneğin

, ben aşağıdaki işlevleri varsa:

FunctionA: İçinde metinle bir kutu çizin
FunctionC: şeyin bir arsa çizin C
şey
FunctionB histogramını çizin FunctionD:

nasıl farklı komut yukarıdaki işlevleri yeniden gidiyorsun şey D'nin bir arsa çizin? Örneğin, bir histogramı C ile gösteren bir rakam oluşturmak istediğimde, bir şekilde Scriptim'den FunctionA ve FunctionC'yi çağırırdım. Ya da, iki çizimde bir şekil isteseydim, FunctionC ve FunctionD'yi çağırırdım.

Kendimi açık bir şekilde açıkladığımı bilmiyorum, ancak bu soruyu sormanın başka bir yolu şudur: bir şekil nesnesini bir işleve nasıl geçirebilirim ve sonra işlevin geçirilen şekil nesnesine bir şey çizmesini sağlarım ve daha sonra başlık veya başka bir şey gibi başka şeyler eklemek için ana betiğe geri dönün?

cevap

8

Eğer Artist objects kullanın ve fonksiyonlara bunları gerektiği gibi geçmek istiyorum:

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 - Teşekkürler! Kodu nasıl biçimlendiriyorsunuz? – aspade

+0

Rica ederim! Kodu biçimlendirmek için, tüm kod bloğunu dört ekstra boşlukla doldurun ve kodunuzdaki sekmeler yerine boşluk kullanın. biçimlendirme üzerinde daha fazla var burada: http://stackoverflow.com/editing-help – tom10

+0

Neden 'myhist()' ve '()' dış ad geri 'ax' dönmek zorunda say_something yok? – crypdick

0

Okey, ben bunu nasıl anladım. Hayal ettiğimden çok daha basitti. Sadece figure ve axes sınıfları ile here okuma biraz gerekli. senin DrawFns.py olarak

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

: ana komut dosyasında

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

Ve o kadar! Ayrıca, DrawFns.py'de daha fazla işlev ekleyebilir ve bunlara import numaralı çağrıya dahil oldukları sürece herhangi bir komut dosyasından çağrı yapabilirim. : D İşte

+0

genellikle şekil bir veya daha fazla eksenleri içeriyor dışında bu, doğru bir fikir olduğunu ve eylemin çoğu, çizimleri yapmak için eksenler yöntemlerini çağırmaktır, bu nedenle, rakamı, daha sonra eksenleri yapmak ve eksenleri (veya bunların içindeki bazı nesneleri) işlevlere aktarmak daha kolaydır. Örnek için cevabımı görün. – tom10

+0

Üzgünüz, bunu daha yeni gördüm. Bahşiş için teşekkürler. Kodu buna göre değiştireceğim (çevrimdışı). Teşekkür ederim! – aspade

İlgili konular