删除matplotlib图中的xticks?


290

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

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

网格消失(确定),但仍保留小刻度线(在主刻度线的位置)。如何删除它们?


有些解决方案对我不起作用。但是,这里的示例仅作了少许更改:ax.set_xticks([], [])它已经解决了……
TravelTrader

Answers:


463

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

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()

在此处输入图片说明


86
我赞赏这不仅能回答问题,而且提供了一个用于打开/关闭几件事的模板。这会将结果应用于x和y轴:plt.tick_params(axis='both', which='both', bottom='off', top='off', labelbottom='off', right='off', left='off', labelleft='off')
史蒂文C.豪威尔2015年

2
如果是3D图怎么办?
tommy.carstensen 2015年

38
这是一个很好的答案。对于那些寻找oo版本的人,axes具有相同的tick_params方法。
疯狂物理学家

22
在的较新版本中matplotlib,您应'on'使用True和替换'off'False
BallpointBen

1
应针对OOP接口和较新版本的语法更新答案。
ifly6

141

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

plt.axis('off')

25
我需要什么谢谢。面向对象的版本将ax.axis('off')在现有的axis实例上。
PlasmaBinturong '16

5
仅适用于xaxis?
qrtLs

82

另外,您可以传递一个空的刻度位置并将其标记为

# 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)

8
如果您已有轴实例,请说ax,然后可以使用:ax.set_xticks([], [])
GuilhermeSalomé19年

@GuilhermeSalomé现在会发出警告,“自Matplotlib 3.2起,不推荐在位置上传递set_xticks()的次要参数;该参数将在以后的两个次要版本中变为仅关键字。” 现在正确的解决方案是什么?
Rylan Schaeffer

2
@RylanSchaeffer ax.set_xticks([])用于主要刻度,ax.set_xticks([], minor=True)用于次要刻度。用等价pyplotplt.xticks([])plt.xticks([], minor=True)
Anakhand


42

有比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')

希望能有所帮助。


22
“更好”是值得商bat的,但备选方案+1。
Mechanical_meat

当目标是仅从“放大”插图中删除xticks,同时将其保留在主图中时,此解决方案的变体也对我有用。使用axins.xaxis.set_major_locator(plt.NullLocator()),其中axins的对象是返回的axins = zoomed_inset_axes()(从中导入的函数mpl_toolkits.axes_grid1.inset_locator)。
丹尼斯·苏默斯

28

尝试删除标签(但不删除刻度):

import matplotlib.pyplot as plt

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


3
setp处于pylab模式,无法针对单个轴使用
破折号2014年

1
面向对象的接口怎么样?
ifly6

这是对我来说也适用于3D绘图的唯一答案。谢谢你!
布伦特

13

此代码片段可能仅有助于删除xtick。

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

此代码片段可能有助于同时删除xtick和yticks。

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

3
# 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')

2
面向对象的版本是ax.tick_params()
MarceloVilla-Piñeros19年

1
另外,不建议使用offonMatplotlibDeprecationWarning: Passing one of 'on', 'true', 'off', 'false' as a boolean is deprecated; use an actual boolean (True/False) instead.
MarceloVilla-Piñeros19年

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.