2017-02-11 33 views
1

我剛剛開始使用matplotlib和seaborn來繪製我的圖。這是我寫到目前爲止使用seaborn調整子圖塊

count = 1 
l=[13,0,47,29,10] 
plt.figure(figsize=(30,40)) 

for ww in l: 
    temp_dict = defaultdict(list) 
    entropies = list() 
    for k,v in df.ix[ww].iteritems(): 
     e = 0 
     for i in v: 
      temp_dict[k].append(float(i)) 
      if not float(i) == 0: 
       e += -1.0*float(i)*log10(float(i)) 
     entropies.append(e) 

    y = entropies 
    x=(range(len(entropies))) 
    slope, intercept, r_value, p_value, std_err = stats.linregress(x,y) 

    plt.subplot(len(lista_autori),2,count) 
    tdf = pd.DataFrame.from_dict(temp_dict, orient='columns') 
    a = tdf.dropna() 
    sns.set(font_scale=2) 
    #sns.factorplot(size=2, aspect=1) 
    sns.heatmap(a,linewidths=.5,cmap="RdBu_r") 
    plt.xlabel(ur'year') 
    plt.ylabel(ur'$PACS$') 
    count +=1 

    plt.subplot(len(lista_autori),2,count) 
    plt.plot(x,y) 
    x1 = (range(28)) 
    y1 = [slope*i + intercept for i in x1] 
    plt.plot(x1,y1) 
    count +=1 


plt.tight_layout(); 

的代碼,結果如下:

enter image description here

我想調整的每一行,指定行的2/3左手方的圖片,剩下的就在右邊。我試圖看看給出的答案here,但是當我必須混合ax和seaborn的熱圖時,我發現了一些困難。任何幫助或其他解決方案?

回答

1

linked question的回答直接告訴您如何使用GridSpec實現不等列寬的網格。在這裏我看不出太多的區別,但是下面對你來說可能更容易理解,因爲它使用了seaborn熱點圖,不止一列,也沒有「斧頭」。

import numpy as np 
import matplotlib.pyplot as plt 
from matplotlib import gridspec 
import seaborn as sns 

# generate some data 
x = np.arange(0, 10, 0.2) 
y = np.sin(x) 
X = np.random.rand(3,4) 

fig = plt.figure(figsize=(8, 6)) 
gs = gridspec.GridSpec(5, 2, width_ratios=[2, 1]) 

for i in range(5): 
    plt.subplot(gs[i*2+0]) 
    sns.heatmap(X) 
    plt.subplot(gs[i*2+1]) 
    plt.plot(x,y) 

plt.show()