2012-07-10 87 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