Palmetto_Girl86
Palmetto_Girl86

Reputation: 1007

Get Rid of Tick Labels for all subplots

Is there a way to get rid of tick labels altogether when creating an array of subplots in Matplotlib? I am currently needing to specify each plot based on the row and column of a larger data set to which the plot corresponds. I've attempted to use the ax.set_xticks([]) and the similar y-axis command, to no avail.

I recognize that it's probably an unusual request to want to make a plot with no axis data whatsoever, but that's what I need. And I need it to automatically apply to all of the subplots in the array.

Upvotes: 54

Views: 108714

Answers (5)

Julia
Julia

Reputation: 41

One can remove the xticks or yticks by

ax.get_xaxis().set_visible(False)
ax.get_yaxis().set_visible(False)

If you want to turn off also the spines, so having no axis at all, you can use:

ax.spines['bottom'].set_visible(False)       
ax.spines['left'].set_visible(False)

And if you want to turn everything off at once, use:

 ax.axis("off")

Upvotes: 3

Roy Shilkrot
Roy Shilkrot

Reputation: 3548

Even more concise than @DrV 's answer, remixing @mwaskom's comment, a complete and total one-liner to get rid of all axes in all subplots:

# do some plotting...
plt.subplot(121),plt.imshow(image1)
plt.subplot(122),plt.imshow(image2)
# ....

# one liner to remove *all axes in all subplots*
plt.setp(plt.gcf().get_axes(), xticks=[], yticks=[]);

Note: this must be called before any calls to plt.show()

Upvotes: 34

Ben
Ben

Reputation: 7124

The commands are the same for subplots

fig = plt.figure()

ax1 = fig.add_subplot(211)
ax2 = fig.add_subplot(212)

ax1.plot([1,2])

ax1.tick_params(
    axis='x',          # changes apply to the x-axis
    which='both',      # both major and minor ticks are affected
    bottom='off',      # ticks along the bottom edge are off
    top='off',         # ticks along the top edge are off
    labelbottom='off'  # labels along the bottom edge are off)
)

plt.draw()

enter image description here

Upvotes: 18

AFItheTechLover
AFItheTechLover

Reputation: 21

You can get rid of the default subplot x and y ticks with simply running the following codes:

fig, ax = plt.subplots()
ax.xaxis.set_major_locator(plt.NullLocator())
ax.yaxis.set_major_locator(plt.NullLocator())
for i in range(3):
    ax = fig.add_subplot(3, 1, i+1)
    ...

Just by adding the 2 aforementioned lines just after fig, ax = plt.subplots() you can remove the default ticks.

Upvotes: 2

DrV
DrV

Reputation: 23480

You have the right method. Maybe you are not applying the set_xticks to the correct axes.

An example:

import matplotlib.pyplot as plt
import numpy as np

ncols = 5
nrows = 3

# create the plots
fig = plt.figure()
axes = [ fig.add_subplot(nrows, ncols, r * ncols + c) for r in range(0, nrows) for c in range(0, ncols) ]

# add some data
for ax in axes:
    ax.plot(np.random.random(10), np.random.random(10), '.')

# remove the x and y ticks
for ax in axes:
    ax.set_xticks([])
    ax.set_yticks([])

This gives:

enter image description here

Note that each axis instance is stored in a list (axes) and then they can be easily manipulated. As usual, there are several ways of doing this, this is just an example.

Upvotes: 68

Related Questions