2017-02-22 6 views
-1

Ich versuche, die y-Achsen für jede Zeile von Teilplots dynamisch zu skalieren, also dachte ich, ich würde manuell das ymax für jedes Teilplot definieren, das ich mit der for-Schleife erstellen würde.Unterschiedliche y-Skalierung für jede Zeile 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") 

Was ich habe jetzt:

enter image description here

Was ich möchte (für jede Zeile beachten unterschiedliche y-Achse) haben:

enter image description here

Antwort

0

Einstellung ylim manuell funktioniert nicht in Ihrem Fall Sinn sharey=True. Wenn Sie es auf False setzen, können Sie ylim für jedes Plot setzen (mit separaten y-Ticks für jedes Diagramm).

Da es scheint, dass Sie ein gemeinsames y für jede Zeile möchten, müssen Sie den maximalen Wert für jede Zeile berechnen und außerhalb der internen Schleife festlegen. Dann können Sie die Häkchen für alle bis auf das erste Diagramm in jeder Zeile ausblenden: ax.set_yticks([]).

Verwandte Themen