Tuesday, 30 January 2018

python - Hiding axis text in matplotlib plots



I'm trying to plot a figure without tickmarks or numbers on either of the axes (I use axes in the traditional sense, not the matplotlib nomenclature!). An issue I have come across is where matplotlib adjusts the x(y)ticklabels by subtracting a value N, then adds N at the end of the axis.



This may be vague, but the following simplified example highlights the issue, with '6.18' being the offending value of N:



import matplotlib.pyplot as plt
import random
prefix = 6.18


rx = [prefix+(0.001*random.random()) for i in arange(100)]
ry = [prefix+(0.001*random.random()) for i in arange(100)]
plt.plot(rx,ry,'ko')

frame1 = plt.gca()
for xlabel_i in frame1.axes.get_xticklabels():
xlabel_i.set_visible(False)
xlabel_i.set_fontsize(0.0)
for xlabel_i in frame1.axes.get_yticklabels():

xlabel_i.set_fontsize(0.0)
xlabel_i.set_visible(False)
for tick in frame1.axes.get_xticklines():
tick.set_visible(False)
for tick in frame1.axes.get_yticklines():
tick.set_visible(False)

plt.show()



The three things I would like to know are:




  1. How to turn off this behaviour in the first place (although in most cases it is useful, it is not always!) I have looked through matplotlib.axis.XAxis and cannot find anything appropriate


  2. How can I make N disappear (i.e. X.set_visible(False))


  3. Is there a better way to do the above anyway? My final plot would be 4x4 subplots in a figure, if that is relevant.



Answer



Instead of hiding each element, you can hide the whole axis:




frame1.axes.get_xaxis().set_visible(False)
frame1.axes.get_yaxis().set_visible(False)


Or, you can set the ticks to an empty list:



frame1.axes.get_xaxis().set_ticks([])
frame1.axes.get_yaxis().set_ticks([])



In this second option, you can still use plt.xlabel() and plt.ylabel() to add labels to the axes.


No comments:

Post a Comment

casting - Why wasn't Tobey Maguire in The Amazing Spider-Man? - Movies & TV

In the Spider-Man franchise, Tobey Maguire is an outstanding performer as a Spider-Man and also reprised his role in the sequels Spider-Man...