2017-08-01 4 views
1

それについては他にも質問がありますが、私の正確な質問はどれも解決できません。もちろんMatplotlib twinx-yticklabelsとyticksとのアラインメント

import matplotlib.pyplot as plt 
calendar = [[1,0,0,1,1,0,1],[0,0,1,1,1,0,1]] 
fig, ax = plt.subplots() 
namelist = ['alpha','beta'] 
yticks = [n for n in range(len(namelist))] 
ax.set_yticks(yticks) 
ax.set_yticklabels(namelist) 
ax2 = ax.twinx() 
ax2.set_yticks(ax.get_yticks()) 
ax2.set_yticklabels(['gamma','delta'])  

im = ax.imshow(calendar, interpolation='none', cmap='summer') 
plt.show() 

enter image description here

アッパーはちょうど非常に単純化したバージョンですが、問題を見るのに十分でなければならない2つの「AX2ライン」をコメントアウトすると、私が好きなプロットがあるが、追加するとき2番目のy軸は、私が望んでいないようにプロットがサイズ変更されます。私はアルファ/ベータをガンマ/デルタと同じ高さにしたい(空白が残らないようにしたい)が、今はかなり時間がかかっている。私はget_yticks()機能を試しましたが(いくつかの同様の質問で提案されたように)、それは役に立たなかった。 ありがとうございます!

EDIT:1つの小さなディテール:解決策は、そのツインカウンターパートを前面にして、より多くのy値(アルファ、ベータ、デルタなど)を処理するという意味で拡張可能でなければなりません。

EDIT 2:(新しい質問を投稿すると便利だったのでわかりませんでしたので、ここで尋ねます:)今はグリッドを追加しようとしています。私はもう一度たくさん試しましたが、何も助けてくれないようです。私はy軸グリッドを得ることができます。次のコードを確認してください(とアンコメントこれらの行と同じことをしてみてください!):

import matplotlib.pyplot as plt 
calendar = [[1,0,0,1,1,0,1],[0,0,1,1,1,0,1]] 
fig, ax = plt.subplots() 
namelist = ['alpha','beta'] 
yticks = [n for n in range(len(namelist))] 
ax.set_xticks([num for num in range(len(calendar[0]))]) 
ax.set_xticks([num-0.5 for num in range(len(calendar[0]))],minor=True) 
ax.set_yticks(yticks) 
ax.set_yticks([num-0.5 for num in range(len(namelist))],minor=True) 
ax.set_yticklabels(namelist) 
im = ax.imshow(calendar, interpolation='none', cmap='summer') 
ax.set_adjustable('box-forced') 
ax.xaxis.grid(which='major',alpha=1,color='k',lw=2) 
ax.xaxis.grid(which='minor',alpha=1,color='k',lw=2) 
ax.yaxis.grid(which='minor',alpha=1,color='k',lw=2) 

#ax2 = ax.twinx() 
#ax2.set_yticks(ax.get_yticks()) 
#ax2.set_yticklabels(['gamma','delta'])  
#im2 = ax2.imshow(calendar, interpolation='none', cmap='summer') 
#ax2.set_adjustable('box-forced') 

plt.show() 

私はグリッドが表示されるまでに取得できますか?ここにどのように(ax2なし)の写真。基本的には、コードは正確に私には同じだが、右に2番目のラベルを付けるべきではありませんか?あなたが欲しいものを得るために enter image description here

答えて

2

一つの方法は、ax2に再プロットすることである:

im2 = ax2.imshow(calendar, interpolation='none', cmap='summer') 

それは完璧ではないのですが、それは動作します。

ticks in correct positions

EDIT:答えhere

、あなたがさらにあなたの座標軸上set_adjustableを使用する場合、空白文字が消える:これは助け

import matplotlib.pyplot as plt 
calendar = [[1,0,0,1,1,0,1],[0,0,1,1,1,0,1]] 
fig, ax = plt.subplots() 
namelist = ['alpha','beta'] 
yticks = [n for n in range(len(namelist))] 
ax.set_yticks(yticks) 
ax.set_yticklabels(namelist) 
im = ax.imshow(calendar, interpolation='none', cmap='summer') 
ax.set_adjustable('box-forced') 

ax2 = ax.twinx() 
ax2.set_yticks(ax.get_yticks()) 
ax2.set_yticklabels(['gamma','delta'])  
im2 = ax2.imshow(calendar, interpolation='none', cmap='summer') 
ax2.set_adjustable('box-forced') 

plt.show() 

whitespace removed

+0

おかげで、私はすでにそれが解決していない緑色/黄色の部分の上と下の空白の問題。 – famfop

+0

@famfopああ、分かります... –

+0

ありがとう!偉大な答え:短いとオンポイント! – famfop

関連する問題