2017-02-22 33 views
-1

我想動態縮放每一排子圖的y軸,所以我想我會手動定義每個我將用for循環創建的子圖的ymax。每行不同的y比例Matplotlib

fig, ax = plt.subplots(3, len(motif.strip()), figsize=(15, 10), sharex=True, sharey=True) 

    for i, s in enumerate(dataw.pos.unique()): 
     for j, r in enumerate(dataw.type.sort_values().unique()): 
      atmp = dataw[(dataw.pos == s) & (dataw.type == r)] 
      btmp = dataw[(dataw.type == r)] 
      ymax = (btmp['values'].values).max() 
      #print(btmp) 
      #print(ymax) 
      tmp = [atmp[atmp['base'] == 'A']['values'].values, 
        atmp[atmp['base'] == 'G']['values'].values, 
        atmp[atmp['base'] == 'T']['values'].values, 
        atmp[atmp['base'] == 'C']['values'].values] 

      ax[j][i].violinplot(tmp) 
      ax[j][i].set_ylim([0, ymax]) 

      #ax[j][i].set(xlabel='base', 
      #    ylabel='values', 
      #    title=s + '--' + r) 

    fig.tight_layout() 

    fig.savefig(str(graph) + ".png") 

我現在所擁有的:

enter image description here

我想有(注意,每行不同的y軸):

enter image description here

回答

0

手動設置ylim將不會在你的情況下工作sharey=True。如果將其設置爲False,則可以爲每個(每個圖均具有單獨的y-滴答)設置ylim

由於看起來你想爲每個共享一個y,所以必須計算每行的最大值並將其設置在內部循環之外。然後,您可以隱藏每行中除第一個繪圖以外的所有刻度:ax.set_yticks([])