2016-02-26 190 views
0

我正在用matplotlib繪製幾個相鄰的面板。我遇到了一些軸標籤在面板會合處重疊的問題。下面是一個最小工作示例和示例圖像。如何刪除matplotlib中的一個刻度軸標籤

import matplotlib.pyplot as plt 

fig = plt.figure(figsize=(4,8)) 
ax1 = fig.add_axes([.25,.5,.5,.25]) 
ax2 = fig.add_axes([.25,.25,.5,.25]) 

ax1.set_xticklabels([]) 

fig.savefig("temp.pdf") 

enter image description here

正如你可以在圖像中看到,頂面板的0.0和底部面板的1.0是在同一個地方。我試圖讓底部面板的1.0不顯示,但仍然顯示軸上剩餘的標籤。沒有我試過的工作。事我曾嘗試:

#This just doesn't do anything 
from matplotlib.ticker import MaxNLocator 
ax3.xaxis.set_major_locator(MaxNLocator(prune='upper')) 

#This produces the image shown below 
labels = [item for item in ax2.get_yticklabels()] 
labels[-1].text = '' 
ax2.set_yticklabels(labels) 

#This also produces the image shown below 
labels = ax2.get_yticklabels() 
labels[-1].set_text('') 
ax2.set_yticklabels(labels) 

enter image description here

上面的圖象是由最後兩個代碼的三個塊的緊接在圖像之前產生的。無論是否包含行labels[-1].text = '',都會出現奇怪的y軸標籤。

回答

2

您將需要抓取所有軸的yticklabels,然後使用除最後一個以外的所有yticklabels進行設置。這裏重要的一點是(特別是對於較新版本的matplotlib),您必須顯示圖形並在之前刷新畫布以獲取ytick標籤,以便它們的默認位置已經被計算出來。

import matplotlib.pyplot as plt 

fig = plt.figure(figsize=(4,8)) 
ax1 = fig.add_axes([.25,.5,.5,.25]) 
ax2 = fig.add_axes([.25,.25,.5,.25]) 

ax1.set_xticklabels([]) 

# Important to render initial ytick labels 
fig.show() 
fig.canvas.draw() 

# Remove the last ytick label 
labels = [tick.get_text() for tick in ax2.get_yticklabels()] 
ax2.set_yticklabels(labels[:-1]) 

# Refresh the canvas to reflect the change 
fig.canvas.draw() 

注:在我以前的代碼中,我使用的是fig.savefig()呼叫改變蜱調試以前的事情,這迫使默認ytick標籤渲染和生成。

enter image description here

+0

無論你的建議改變我的y軸標籤'文本(0,0,U 「)」)'。我在上面編輯的問題中展示了這個圖片。也許我在我的matplotlibrc文件中設置的東西是搞砸了?我嘗試關閉matplotlibrc文件中的所有內容,但問題仍然存在。更重要的是,無論是否包含'labels [-1] .set_text('')',我都會得到同樣奇怪的y軸標籤。 – Joshua

+0

@Joshua嗯不知道那裏發生了什麼。我已經用不應該給您帶來任何問題的解決方案更新了我的答案。 – Suever

+0

您的更新使我的軸標籤完全消失。當我在你的代碼塊的第一行之後'打印標籤'時,我得到一個空字符串列表:'[u'',u'',u'',u'',u'',u''] ' – Joshua

相關問題