2012-07-10 152 views

回答

15

尖的通過@imsc,通過使用ax.xaxis.set_ticks_positionax.yaxis.set_ticks_position方法將刻度的位置設置爲底部和左側(如果您不希望它們位於頂部和右側),可以調整刻度線的可見性。

如果您還想將軸本身設置爲不可見,請檢查matplotlib.spines類。您只需使用ax.spines[spine].set_color方法將棘的顏色設置爲none

如果你有很多情節要顯示,並且不想每次都手動關閉軸/刻度,下面是一個可以幫你完成工作的功能。

基本上,您可以爲每個軸定義所需的顏色(在這種情況下,none將使其不可見),並且該功能還會「關閉」所有不可見軸的刻度標記。我還添加了選項來定義軸線的linewidth以及標記和標記之間的標記標記和padfontsize

def customaxis(ax, c_left='k', c_bottom='k', c_right='none', c_top='none', 
       lw=3, size=12, pad=8): 

    for c_spine, spine in zip([c_left, c_bottom, c_right, c_top], 
           ['left', 'bottom', 'right', 'top']): 
     if c_spine != 'none': 
      ax.spines[spine].set_color(c_spine) 
      ax.spines[spine].set_linewidth(lw) 
     else: 
      ax.spines[spine].set_color('none') 
    if (c_bottom == 'none') & (c_top == 'none'): # no bottom and no top 
     ax.xaxis.set_ticks_position('none') 
    elif (c_bottom != 'none') & (c_top != 'none'): # bottom and top 
     ax.tick_params(axis='x', direction='out', width=lw, length=7, 
         color=c_bottom, labelsize=size, pad=pad) 
    elif (c_bottom != 'none') & (c_top == 'none'): # bottom but not top 
     ax.xaxis.set_ticks_position('bottom') 
     ax.tick_params(axis='x', direction='out', width=lw, length=7, 
         color=c_bottom, labelsize=size, pad=pad) 
    elif (c_bottom == 'none') & (c_top != 'none'): # no bottom but top 
     ax.xaxis.set_ticks_position('top') 
     ax.tick_params(axis='x', direction='out', width=lw, length=7, 
         color=c_top, labelsize=size, pad=pad) 
    if (c_left == 'none') & (c_right == 'none'): # no left and no right 
     ax.yaxis.set_ticks_position('none') 
    elif (c_left != 'none') & (c_right != 'none'): # left and right 
     ax.tick_params(axis='y', direction='out', width=lw, length=7, 
         color=c_left, labelsize=size, pad=pad) 
    elif (c_left != 'none') & (c_right == 'none'): # left but not right 
     ax.yaxis.set_ticks_position('left') 
     ax.tick_params(axis='y', direction='out', width=lw, length=7, 
         color=c_left, labelsize=size, pad=pad) 
    elif (c_left == 'none') & (c_right != 'none'): # no left but right 
     ax.yaxis.set_ticks_position('right') 
     ax.tick_params(axis='y', direction='out', width=lw, length=7, 
         color=c_right, labelsize=size, pad=pad) 

下面是如何使用它的示例:

import numpy as np 
import matplotlib.pyplot as plt 

fig, ([ax1, ax2], [ax3, ax4]) = plt.subplots(nrows=2, ncols=2) 

for ax in [ax1, ax2, ax3, ax4]: 
    ax.plot(np.random.randn(10), lw=2) 

customaxis(ax1) #default: no right and top axis 
customaxis(ax2, c_left='none', c_bottom='none', c_right='k', c_top='k') 
customaxis(ax3, c_left='none', c_bottom='k', c_right='k', c_top='none') 
customaxis(ax4, c_left='k', c_bottom='none', c_right='none', c_top='k') 

plt.show() 

spines

9

tick_params應該這樣做。

我沒有我目前的計算機上安裝matplotlib,所以我不能測試它,但這應該工作:

import matplotlib.pyplot as plt 

ax = plt.subplot(111) 
plt.plot([0,1], [0,1]) 
ax.tick_params(labeltop='off', labelright='off') 
plt.show() 
1
plt.tick_params(top='off', right='off', which='both') 

我上面的代碼中使用 '上',而不是 '關',用於顯示刻度標記在matplotlib 2.0中的頂部和右邊,默認的'底部'和'左邊',

+0

歡迎來到SO!請格式化您的答案,以便閱讀,編輯答案時,請參閱編輯框右側的格式幫助按鈕。 – 2017-12-26 07:11:27