2015-09-17 65 views
2

我有一個相當簡單的問題,但有一些讓我難住2天。 我需要繪製2+文件。每個文件需要繪製在總共25個繪圖上,但必須繪製在同一組軸上。 (也就是說,如果我需要每個地塊上有2行25個地塊的2個文件)。Matplotlib。在'for循環'繪製到同一軸

我有產生50個圖(爲每一個行)此須藤代碼...這是錯誤的

with open(bamlist, 'r') as bamlist: 
    for bam in bamlist:  #Opens the 2 files 
     'Generate data Here' 
     dataframe = [] 
     for line in data: 
      line = line.split("\t") 
      dataframe.append(line[0:4:1]) 
     df = pd.DataFrame(dataframe, columns=['Chromosome', 'Position', 'N', 'BaseCount']) 

     grouped_df = df.groupby('Chromosome')  #groups dataframe into the required 25plots 
     for df in grouped_df: 
      density_data = 'Get density data from df' 
      f, ax = plt.subplots()   
      sns.kdeplot(density_data, ax=ax, linewidth=1) 
      pp.savefig() 
pp.close() 

有沒有辦法恢復到初始設置的軸的第二時間爲循環被輸入,這樣我就可以得到2條線,每條有25塊圖(相對於50塊)?

+0

你想上一個數字25米的次要情節,或25級獨立的數字? – tom

+0

要麼。單獨的數字將更容易查看壽。 –

回答

8

您的問題,您使用的莖:

f, ax = plt.subplots() 

這意味着你每產生你打這一行的時間(在你的情況下,50倍)的新插曲。您需要生成25個子圖並稍後參考。你可以這樣做:

axes = [] 
for i in range(25): 
    f,ax = plt.subplots() 
    axes.append(ax) 

然後在您的循環:

for df_index in range(len(grouped_df)): 
    df = grouped_df[df_index] 
    density_data = 'Get density data from df' 
    sns.kdeplot(density_data, ax=axes[df_index], linewidth=1) 

你也可以做一個檢查,看是否軸不存在(如果它延伸到超過25個次要情節或東西),如果沒有,創建它。

+0

謝謝!幫了很多!也得到它與plot.figure() –

+0

謝謝你的迴應。我很高興它有幫助,我很高興你想通過figure()代替subplots()在新地塊中產生數據(這在我寫回應之前在評論中沒有澄清)。如果這個答案符合你的要求,並且你認爲它可以幫助其他人搜索同樣的東西,請「接受」答案。謝謝 :) – JArkinstall

2

使用plt.figure()也幹得不錯......

iterate = -1 
for df in grouped_df: 
    iterate += 1 
    plt.figure(iterate) 
    density_data = 'Get density data from df' 
    sns.kdeplot(density_data, linewidth=1) 
    pp.savefig() 
pp.close()