2016-04-07 7 views
1

Matplotlib kullanarak bir grafiği çizen bir python sınıfının bir yöntemine sahip olursam, bu yöntemi isteğe bağlı büyüklükte alt yazılar oluşturmak için başka bir yöntemle nasıl kullanabilirim?Bir python kullanımı, gerekli olduğu kadar büyük boyutta alt boyutta tüm verileri barındırır?

import matplotlib.pyplot as plt 
def plot(x,y): 
    fig=plt.figure() 
    plt.plot(x,y) 

x=[3,3,5,4,6,7,8,6] 
y=[6,,5,,7,6,5,4,6] 
plot(x,y) 

bir grafik üretecektir Örneğin

fonksiyonu için

. Eğer (x,y) çiftinin 30 setini söylemiş olsaydım, plot'u, gerektiğinde alt şablonlara eklerken bir döngü içinde nasıl kullanabilirim? Yani 4'e 4 altpip istersek, geriye kalan sadece 2 grafik içeren 7 alt şeye ihtiyacımız var.

+0

evet, bu bir ile bir türlü mümkün biraz çaba. :) –

cevap

1

armatita cevap gayet olumlu, ve her zaman (subplots bir "kare" için düzenlemek için satır aynı sayıda çalışacağız ve mümkünse sütunlar). Aşağıdaki kullanabilirsiniz:

Eğer (9 monitör, bir 16 olduğunda satırlardan daha yani fazla sütun): subplots farklı boy oranını takip etmek istiyorsanız

import matplotlib.pyplot as plt 
import numpy as np 
import math 

def fitPlots(N, aspect=(16,9)): 
    width = aspect[0] 
    height = aspect[1] 
    area = width*height*1.0 
    factor = (N/area)**(1/2.0) 
    cols = math.floor(width*factor) 
    rows = math.floor(height*factor) 
    rowFirst = width < height 
    while rows*cols < N: 
     if rowFirst: 
      rows += 1 
     else: 
      cols += 1 
     rowFirst = not(rowFirst) 
    return rows, cols 

numberofplots = 31 
rows,cols = fitPlots(numberofplots) 

plt.figure() 
for i in range(1,numberofplots+1): 
    x = np.random.randint(0,100,10) 
    y = np.random.randint(0,100,10) 
    ax = plt.subplot(rows,cols,i) 
    ax.plot(x,y) 
plt.show() 
3

Bunu başarmak için altpip'i kullanabilirsiniz. Aşağıdaki örnek: bu

import matplotlib.pyplot as plt 
import numpy as np 

def plot(x,y,i,num): 
    snum = np.sqrt(num)+1 
    ax = plt.subplot(snum,snum,i) 
    ax.plot(x,y) 

numberofplots = 31 
for i in range(1,numberofplots+1): 
    x = np.random.randint(0,100,10) 
    y = np.random.randint(0,100,10) 
    plot(x,y,i,numberofplots) 

sonuçlar:

Multiple plots in a grid