2017-02-22 8 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") 

:私は(行ごとに異なるY軸の点に注意してください)持っていると思い何

enter image description here

手動 ylimを設定

enter image description here

答えて

0

あなたのケースセンスでは動作しませんsharey=True。 Falseに設定した場合は、プロット(プロットごとに別々のy-ティックを使用)ごとにylimを設定することができます。

それぞれの共有yが必要なので、各行の最大値を計算し、内部ループの外に設定する必要があります。次に、各行の最初のプロット以外のすべてのティックを非表示にすることができます(ax.set_yticks([]))。

関連する問題