簡體   English   中英

如何在matplotlib中刪除一個刻度的軸標簽

[英]How to delete axis label for just one tick in 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")

在此處輸入圖片說明

正如您在圖像中看到的,頂部面板的 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) 

在此處輸入圖片說明

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

您將需要獲取軸的所有 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 標簽。

在此處輸入圖片說明

添加這一行: plt.setp(ax2.get_yticklabels()[-1], visible=False)

它將使軸 2 垂直軸上最上面的刻度標簽不可見

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM