Search code examples
pythonmatplotlibaxes

Python How to set axes for a matplotlib plot


Hi for the matplotlib plot below I want to set the axes titles such that they show that the x-axis values run from

2**-5, 2**-4, 2**-3,..., 2**14, 2**15

and the y-axis values run from

2**-15, 2**-14,...., 2**4, 2**5

The graph I want to display them on is:

The graph with the axes that needs changing

The code for the graph is below:

from matplotlib import pyplot
import matplotlib as mpl

import numpy as np


zvals = 100*np.random.randn(21, 21)
fig = pyplot.figure(2)

cmap2 = mpl.colors.LinearSegmentedColormap.from_list('my_colormap',
                                           ['blue','green','brown'],
                                           256)

img2 = pyplot.imshow(zvals,interpolation='nearest',
                    cmap = cmap2,
                    origin='lower')

pyplot.colorbar(img2,cmap=cmap2)
pyplot.show()

Solution

  • You can use a range with a stepsize to label every 5th cell:

    locs = range(0, N, 5)
    ax.set(xticks=locs, xlabels=...)
    

    For example,

    from matplotlib import pyplot as plt
    from matplotlib import colors as mcolors
    import numpy as np
    
    
    N = 21
    zvals = 100*np.random.randn(N, N)
    fig = plt.figure(2)
    ax = fig.add_subplot(111)
    cmap2 = mcolors.LinearSegmentedColormap.from_list(
        'my_colormap', ['blue','green','brown'], 256)
    
    img2 = plt.imshow(zvals,interpolation='nearest',
                      cmap=cmap2, origin='lower')
    plt.colorbar(img2, cmap=cmap2)
    step = 5
    locs = range(0, N, step)
    ax.set(
        xticks=locs,
        xticklabels=['$2^{{{}}}$'.format(i-5) for i in locs],
        yticks=locs,
        yticklabels=['$2^{{{}}}$'.format(i-15) for i in locs])
    plt.show()
    

    enter image description here