ChatGPT解决这个技术问题 Extra ChatGPT

Remove xticks in a matplotlib plot?

I have a semilogx plot and I would like to remove the xticks. I tried:

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

The grid disappears (ok), but small ticks (at the place of the main ticks) remain. How to remove them?

Some of the solutions didn't work for me. But just a little change of the examples here: ax.set_xticks([], []) and it's solved ...

a
adamconkey

The plt.tick_params method is very useful for stuff like this. This code turns off major and minor ticks and removes the labels from the x-axis.

Note that there is also ax.tick_params for matplotlib.axes.Axes objects.

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

https://i.stack.imgur.com/0emBv.png


I appreciate how this not only answers the question but provides a template for turning several things off/on. This applies the result to both x and y axes: plt.tick_params(axis='both', which='both', bottom='off', top='off', labelbottom='off', right='off', left='off', labelleft='off')
What if it is a 3D plot?
This is a great answer. For those looking for the oo version, axes has the same tick_params method.
In newer versions of matplotlib, you should replace 'on' with True and 'off' with False.
Answer ought be updated for the OOP interface and the newer version syntax.
M
Martin Spacek

Not exactly what the OP was asking for, but a simple way to disable all axes lines, ticks and labels is to simply call:

plt.axis('off')

What I needed thanks. The object oriented version would be ax.axis('off') on an existing axes instance.
how for only xaxis?
@qrtLs for disabling only x axis labels: plt.xticks([]) worked for me.
T
Trevor Boyd Smith

Alternatively, you can pass an empty tick position and label as

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

If you have an existing axis instance, say ax, then you could use: ax.set_xticks([], [])
@GuilhermeSalomé this now raises a warning, "Passing the minor parameter of set_xticks() positionally is deprecated since Matplotlib 3.2; the parameter will become keyword-only two minor releases later." What's the correct solution now?
@RylanSchaeffer ax.set_xticks([]) for major ticks, ax.set_xticks([], minor=True) for minor ticks. Equivalents with pyplot are plt.xticks([]) and plt.xticks([], minor=True).
T
Tom Phillips

Here is an alternative solution that I found on the matplotlib mailing list:

import matplotlib.pylab as plt

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

https://i.imgur.com/CzJKsoZ.png


d
dmcdougall

There is a better, and simpler, solution than the one given by John Vinyard. Use NullLocator:

import matplotlib.pyplot as plt

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

Hope that helps.


"Better" is debatable, but +1 for the alternative.
A variant of this solution also worked for me when the goal was to only remove xticks from a "zoomed in" inset, while keeping them in the main plot. Using axins.xaxis.set_major_locator(plt.NullLocator()), where axins is the object returned by axins = zoomed_inset_axes() (function imported from mpl_toolkits.axes_grid1.inset_locator).
C
Chris Seymour

Try this to remove the labels (but not the ticks):

import matplotlib.pyplot as plt

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

example


setp is in pylab mode, cannot be used against individual axes
How about the object oriented interface?
This was the only answer that also worked for 3D plots for me. Thanks for this!
A
Amitrajit Bose

This snippet might help in removing the xticks only.

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

This snippet might help in removing the xticks and yticks both.

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

h
hahnec

Those of you looking for a short command to switch off all ticks and labels should be fine with

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

which allows type bool for respective parameters since version matplotlib>=2.1.1

For custom tick settings, the docs are helpful:

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


M
Marcelo Villa-Piñeros
# 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')

The object oriented version of this is ax.tick_params()
Also, using off and on is deprecated. MatplotlibDeprecationWarning: Passing one of 'on', 'true', 'off', 'false' as a boolean is deprecated; use an actual boolean (True/False) instead.
l
losnihciL

Modify the following rc parameters by adding the commands to the script:

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

A sample matplotlibrc file is depicted in this section of the matplotlib documentation, which lists many other parameters like changing figure size, color of figure, animation settings, etc.