【问题标题】:Python hide ticks but show tick labelsPython隐藏刻度但显示刻度标签
【发布时间】:2015-05-01 13:58:01
【问题描述】:

我可以用

去除蜱虫
ax.set_xticks([]) 
ax.set_yticks([]) 

但这也会删除标签。任何方式我都可以绘制刻度标签,但不能绘制刻度和脊椎

【问题讨论】:

  • 你是指情节标签还是刻度标签?
  • 谢谢,我指的是刻度标签。澄清了问题...
  • 脊椎是什么意思?

标签: python matplotlib


【解决方案1】:

您可以使用tick_params (http://matplotlib.org/api/axes_api.html#matplotlib.axes.Axes.tick_params) 将刻度长度设置为 0:

fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot([1],[1])
ax.tick_params(axis=u'both', which=u'both',length=0)
plt.show()

【讨论】:

  • 您也可以使用ax.xaxis.set_tick_params(...) 代替ax.tick_params(axis='x', ...)。前者更面向对象。
【解决方案2】:

感谢您的回答 @julien-spronck 和 @cmidi。
作为说明,我必须使用这两种方法才能使其工作:

import numpy as np
import matplotlib.pyplot as plt

fig, (ax1, ax2, ax3) = plt.subplots(1, 3, figsize=(11, 3))

data = np.random.random((4, 4))

ax1.imshow(data)
ax1.set(title='Bad', ylabel='$A_y$')
# plt.setp(ax1.get_xticklabels(), visible=False)
# plt.setp(ax1.get_yticklabels(), visible=False)
ax1.tick_params(axis='both', which='both', length=0)

ax2.imshow(data)
ax2.set(title='Somewhat OK', ylabel='$B_y$')
plt.setp(ax2.get_xticklabels(), visible=False)
plt.setp(ax2.get_yticklabels(), visible=False)
# ax2.tick_params(axis='both', which='both', length=0)

ax3.imshow(data)
ax3.set(title='Nice', ylabel='$C_y$')
plt.setp(ax3.get_xticklabels(), visible=False)
plt.setp(ax3.get_yticklabels(), visible=False)
ax3.tick_params(axis='both', which='both', length=0)

plt.show()

【讨论】:

    【解决方案3】:

    这对我有用:

    plt.tick_params(axis='both', labelsize=0, length = 0)
    

    【讨论】:

      【解决方案4】:

      在参加 Python 课程时,这是一个问题。

      以下是给定的解决方案,我认为它更具可读性和直观性。

      ax.tick_params(top=False,
                     bottom=False,
                     left=False,
                     right=False,
                     labelleft=True,
                     labelbottom=True)
      

      【讨论】:

      • 从 v2.2 开始不推荐使用“on”或“off”,您现在应该使用 True 或 False。
      【解决方案5】:

      matplotlib.pyplot.setp(*args, **kwargs) 用于设置艺术家对象的属性。除了get_xticklabes(),您还可以使用它来使其不可见。

      以下内容

      import matplotlib.pyplot as plt
      fig = plt.figure()
      ax = fig.add_subplot(2,1,1)
      ax.set_xlabel("X-Label",fontsize=10,color='red')
      plt.setp(ax.get_xticklabels(),visible=False)
      

      以下是参考页面 http://matplotlib.org/api/pyplot_api.html

      【讨论】:

        【解决方案6】:

        您可以设置yaxisxaxis set_ticks_position 属性,使它们分别仅显示在左侧和底部。

        ax.yaxis.set_ticks_position('left')
        ax.xaxis.set_ticks_position('bottom')
        

        此外,您还可以通过将特定脊椎的set_visible 属性设置为False 来隐藏脊椎。

        axes[i].spines['right'].set_visible(False)
        axes[i].spines['top'].set_visible(False)
        

        【讨论】:

        • 一点点额外的描述不会有什么坏处。
        • 虽然此代码可以解决问题,including an explanation 说明如何以及为什么解决问题将真正有助于提高您的帖子质量,并可能导致更多的赞成票。请记住,您正在为将来的读者回答问题,而不仅仅是现在提问的人。请edit您的答案添加解释,并说明适用的限制和假设。
        【解决方案7】:

        这对我来说效果很好!试试看

        import matplotlib.pyplot as plt
        import numpy as np
        
        plt.figure()
        
        languages =['Python', 'SQL', 'Java', 'C++', 'JavaScript']
        pos = np.arange(len(languages))
        popularity = [56, 39, 34, 34, 29]
        
        plt.bar(pos, popularity, align='center')
        plt.xticks(pos, languages)
        plt.ylabel('% Popularity')
        plt.title('Top 5 Languages for Math & Data \nby % popularity on Stack Overflow', 
        alpha=0.8)
        
        # remove all the ticks (both axes), 
        plt.tick_params(top='off', bottom='off', left='off', right='off', labelleft='off', 
        labelbottom='on')
        plt.show()
        

        【讨论】:

          【解决方案8】:

          目前遇到同样的问题,在3.3.3版本解决如下:

          # My matplotlib ver: 3.3.3
          
          ax.tick_params(tick1On=False) # "for left and bottom ticks"
          ax.tick_params(tick2On=False) # "for right and top ticks, which are off by default"
          

          例子:

          fig, ax = plt.subplots()
          ax.plot([1, 2, 3, 4, 5], [1, 2, 3, 4, 5])
          ax.tick_params(tick1On=False)
          plt.show()
          

          输出:

          【讨论】:

          • 请在您的代码示例中添加注释符号以使其可执行。
          • 道歉。我有点新。感谢您的编辑。
          【解决方案9】:

          假设您要删除 Y 轴上的一些刻度并仅显示与值大于 0 的刻度相对应的 yticks,您可以执行以下操作:

          from import matplotlib.pyplot as plt
          
          fig, ax = plt.subplots()
          
          # yticks and yticks labels
          yTicks = list(range(26))
          yTicks = [yTick if yTick % 5 == 0 else 0 for yTick in yTicks]
          yTickLabels = [str(yTick) if yTick % 5 == 0 else '' for yTick in yTicks]
          

          然后你设置你的轴对象的Y 轴如下:

          ax.yaxis.grid(True)
          ax.set_yticks(yTicks)
          ax.set_yticklabels(yTickLabels, fontsize=6)
          fig.savefig('temp.png')
          plt.close()
          

          你会得到这样的情节:

          【讨论】:

            猜你喜欢
            • 2013-06-22
            • 2014-01-23
            • 2016-08-30
            • 1970-01-01
            • 1970-01-01
            • 2016-12-16
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多