删除 matplotlib 图中的 xticks?

Posted

技术标签:

【中文标题】删除 matplotlib 图中的 xticks?【英文标题】:Remove xticks in a matplotlib plot? 【发布时间】:2012-10-11 11:53:21 【问题描述】:

我有一个 semilogx 图,我想删除 xticks。我试过了:

plt.gca().set_xticks([])
plt.xticks([])
ax.set_xticks([])

网格消失(好的),但小刻度(在主要刻度的位置)仍然存在。如何删除它们?

【问题讨论】:

一些解决方案对我不起作用。但只是对这里的例子稍作改动:ax.set_xticks([], []) 它已经解决了...... 【参考方案1】:

plt.tick_params 方法对于这样的事情非常有用。此代码关闭主要和次要刻度并从 x 轴上删除标签。

请注意,ax.tick_params 也用于 matplotlib.axes.Axes 对象。

from matplotlib import pyplot as plt
plt.plot(range(10))
plt.tick_params(
    axis='x',          # changes apply to the x-axis
    which='both',      # both major and minor ticks are affected
    bottom=False,      # ticks along the bottom edge are off
    top=False,         # ticks along the top edge are off
    labelbottom=False) # labels along the bottom edge are off
plt.show()
plt.savefig('plot')
plt.clf()

【讨论】:

我很欣赏这不仅回答了这个问题,而且还提供了一个模板来关闭/打开一些东西。这会将结果应用于 x 轴和 y 轴:plt.tick_params(axis='both', which='both', bottom='off', top='off', labelbottom='off', right='off', left='off', labelleft='off') 如果是 3D 绘图呢? 这是一个很好的答案。对于那些寻找 oo 版本的人,axes 具有相同的tick_params 方法。 在较新版本的matplotlib 中,应将'on' 替换为True,将'off' 替换为False 应针对 OOP 接口和较新版本的语法更新答案。【参考方案2】:

通过将命令添加到脚本来修改以下rc参数:

plt.rcParams['xtick.bottom'] = False
plt.rcParams['xtick.labelbottom'] = False

matplotlib 文档的this section 中描述了一个示例 matplotlibrc 文件,其中列出了许多其他参数,例如更改图形大小、图形颜色、动画设置等。

【讨论】:

【参考方案3】:

那些正在寻找关闭所有刻度和标签的简短命令的人应该可以使用

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

自版本 matplotlib>=2.1.1 起允许为各个参数键入 bool

对于自定义刻度设置,文档很有帮助:

https://matplotlib.org/api/_as_gen/matplotlib.axes.Axes.tick_params.html

【讨论】:

【参考方案4】:

或者,您可以传递一个空的刻度位置并将标签作为

# for matplotlib.pyplot
# ---------------------
plt.xticks([], [])
# for axis object
# ---------------
# from Anakhand May 5 at 13:08
# for major ticks
ax.set_xticks([])
# for minor ticks
ax.set_xticks([], minor=True)

【讨论】:

如果你有一个现有的轴实例,比如ax,那么你可以使用:ax.set_xticks([], []) @GuilhermeSalomé 这现在会引发警告,“从 Matplotlib 3.2 开始,不推荐在位置上传递 set_xticks() 的次要参数;该参数将在以后的两个次要版本中成为关键字。”现在正确的解决方案是什么? @RylanSchaeffer ax.set_xticks([]) 用于主要刻度,ax.set_xticks([], minor=True) 用于次要刻度。 pyplot 的等价物是 plt.xticks([])plt.xticks([], minor=True)【参考方案5】:
# remove all the ticks (both axes), and tick labels on the Y axis
plt.tick_params(top='off', bottom='off', left='off', right='off', labelleft='off', labelbottom='on')

【讨论】:

这个面向对象的版本是ax.tick_params() 另外,不推荐使用offonMatplotlibDeprecationWarning: Passing one of 'on', 'true', 'off', 'false' as a boolean is deprecated; use an actual boolean (True/False) instead.【参考方案6】:

这个 sn-p 可能只有助于删除 xticks。

from matplotlib import pyplot as plt    
plt.xticks([])

这个 sn-p 可能有助于删除 xticks 和 yticks。

from matplotlib import pyplot as plt    
plt.xticks([]),plt.yticks([])

【讨论】:

【参考方案7】:

这是我在matplotlib mailing list 上找到的另一种解决方案:

import matplotlib.pylab as plt

x = range(1000)
ax = plt.axes()
ax.semilogx(x, x)
ax.xaxis.set_ticks_position('none') 

【讨论】:

【参考方案8】:

试试这个来删除标签(但不是刻度):

import matplotlib.pyplot as plt

plt.setp( ax.get_xticklabels(), visible=False)

example

【讨论】:

setp 处于 pylab 模式,不能用于单个轴 面向对象的接口怎么样? 这是唯一对我来说也适用于 3D 绘图的答案。谢谢!【参考方案9】:

不完全是 OP 所要求的,但禁用所有轴线、刻度线和标签的简单方法是简单地调用:

plt.axis('off')

【讨论】:

我需要什么谢谢。面向对象的版本将是现有坐标区实例上的ax.axis('off') 只有 xaxis 怎么办? @qrtLs 仅禁用 x 轴标签:plt.xticks([]) 为我工作。【参考方案10】:

有一个比 John Vinyard 给出的更好、更简单的解决方案。使用NullLocator

import matplotlib.pyplot as plt

plt.plot(range(10))
plt.gca().xaxis.set_major_locator(plt.NullLocator())
plt.show()
plt.savefig('plot')

希望对您有所帮助。

【讨论】:

“更好”是值得商榷的,但是 +1 可以替代。 当目标是只从“放大”的插图中删除 xticks,同时将它们保留在主图中时,此解决方案的一个变体也适用于我。使用axins.xaxis.set_major_locator(plt.NullLocator()),其中axinsaxins = zoomed_inset_axes()返回的对象(从mpl_toolkits.axes_grid1.inset_locator导入的函数)。

以上是关于删除 matplotlib 图中的 xticks?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用matplotlib使绘图的xtick标签成为简单的图形?

如何使用 matplotlib 更改 xticks? [复制]

Matplotlib - 将 Xticks 更改为线上的值而不是数据点

是否可以在 python 的 matplotlib 中包装 xticks 的文本?

Matplotlib 无法旋转 xticks [重复]

Matplotlib 无法旋转 xticks [重复]