python matplotlib imshow() custom tickmarks

zje picture zje · Feb 21, 2012 · Viewed 51.3k times · Source

I'm trying to set custom tick marks on my imshow() output, but haven't found the right combination.

The script below summarizes my attempts. In this script, I'm trying to make the tickmarks at all even numbers on each axis instead of the default (-10,-5,0,5,10)

#!/usr/bin/env python
import matplotlib.pyplot as plt
import numpy as np

#Generate random histogram
N=25
middle=N/2
hist=np.random.random_sample((N,N))

#Ticks at even numbers, data centered at 0
ticks=np.arange(-middle,middle+2,2)

extent=(-middle,middle,-middle,middle)
plt.imshow(hist, interpolation='nearest', extent=extent, origin='lower')
plt.colorbar()

#
#These are my attempts to set the tick marks
#
#plt.gcf().gca().set_ticks(ticks)

#plt.gca().set_ticks(ticks)

#ax=plt.axes()
#ax.set_ticks(ticks)

plt.show()

I'm starting to get the feeling that set_ticks() might not be the way to do it, but I'm not sure what else to try.

Thanks!

Answer

mechanical_meat picture mechanical_meat · Feb 21, 2012

http://matplotlib.sourceforge.net/api/pyplot_api.html#matplotlib.pyplot.xticks

plt.xticks(ticks)

Edit: as Yann mentions in a comment, you may also be interested in plt.yticks()

Result (using plt.xticks(ticks, fontsize=9)): enter image description here