2017-08-01 59 views
1

還有其他問題,但似乎沒有涵蓋我的確切問題/他們的解決方案沒有「糾正」我的問題。Matplotlib與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

當然,上的是隻是一個很簡單的版本,但它應該是足夠的,看問題:當註釋掉兩個「AX2線」的情節是我想要的,但加時第二個Y軸的情節調整,就像我不想要它。我希望alpha/beta與伽瑪/三角洲處於同一高度(這樣就沒有剩餘空白空間了),但現在我失敗了很長一段時間。我試過了get_yticks()函數(正如一些類似的問題中提出的那樣),但它沒有幫助。 在此先感謝!

編輯:一個小細節:從某種意義上說,解決方案應該是「可擴展的」,它應該在前面處理更多的y值(alpha,beta,delta,...)。編輯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)。基本上不應該給我的代碼完全相同,但第二個標籤在右邊? enter image description here

回答

2

一種方式來獲得你想要的是重新情節上ax2

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

它並不完美,但它的作品。

ticks in correct positions

編輯

繼答案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