2013-04-12 24 views
5

Matplotlib için biraz yeni. Yapmaya çalıştığım şey, birkaç dosyayı eps dosyalarına kaydeden ve sonra birleşik bir şekil oluşturan kod yazmaktır. Temelde ne yapmak istiyorum sonra benmatplotlib - bir şekilden diğerine ikiye ayrılıyor?

my_combo_plot(my_plot_1() , my_plot_2()) 

gibi bir şey yapabileceğini sonra

def my_plot_1(): 
    fig = plt.figure() 
    ... 
    return fig. 

def my_plot_2(): 
    fig = plt.figure() 
    ... 
    return fig 

def my_combo_plot(fig1,fig2): 
    fig = plt.figure() 
    gs = gridspec.GridSpec(2,2) 
    ax1 = plt.subplot(gs[0,0]) 
    ax2 = plt.subplot(gs[0,1]) 
    ax1 COPY fig1 
    ax2 COPY fig2 
    ... 

gibi bir şey var ve tüm verileri ve ayarları ilk döndürdüğü çizimlerinden kopyalanan olduğunu iki fonksiyon, ama matplotlib ile bunun nasıl olacağını anlayamıyorum.

cevap

5

Pyplot türü bir makine gibi çalıştığı için, ne istediğinizi sormak mümkün değildir. Bunun yerine, çizim kodunu dışarıya atmak istiyorum:

import matplotlib.pyplot as plt 

def my_plot_1(ax=None): 
    if ax is None: 
     ax = plt.gca() 
    ax.plot([1, 2, 3], 'b-') 

def my_plot_2(ax=None): 
    if ax is None: 
     ax = plt.gca() 
    ax.plot([3, 2, 1], 'ro') 

def my_combo_plot(): 
    ax1 = plt.subplot(1,2,1) 
    ax2 = plt.subplot(1,2,2) 
    my_plot_1(ax1) 
    my_plot_2(ax2) 
+0

Teşekkürler! Bu yapmaya çalıştığım şey için iyi bir çözüm. –

+1

Bu en iyi çözüm IMHO. Bunu eklemek istedim, şimdi bu rakamlar seçilebilir, teknik olarak bir figür örneğini kopyalamak da mümkündür - bunu bir arka uçtan diğerine bile yapabilirsiniz. – pelson

+1

Bu, hızlı bir çalışma olabilir, ancak bir cevap değildir. Çok fazla zaman harcayan "çizim talimatı" nız varsa, bu çözüm uygun değildir. 3 alt plotte, XZ, YZ ve XY görünümlerinde 3B grafiğe sahip olduğumu ve göstermek istediğimi varsayalım. Prensip olarak aynı grafiği kullanabilir ve görünümü değiştirebilirsin. Bu çözüm ile, sadece bir kez yerine 3 kez çizim yapın ve görünümü değiştirin. (Ne yazık ki, bunu nasıl yapacağımı bilmiyorum). Birisi? – user989762