Matplotlib.ticker.IndexFormatter class in Python (original) (raw)

from matplotlib.ticker import IndexFormatter, IndexLocator

import pandas as pd

import matplotlib.pyplot as plt

years = range ( 2015 , 2018 )

fields = range ( 4 )

days = range ( 4 )

bands = [ 'R' , 'G' , 'B' ]

index = pd.MultiIndex.from_product(

`` [years, fields], names = [ 'year' , 'field' ])

columns = pd.MultiIndex.from_product(

`` [days, bands], names = [ 'day' , 'band' ])

df = pd.DataFrame( 0 , index = index, columns = columns)

df.loc[( 2015 , ), ( 0 , )] = 1

df.loc[( 2016 , ), ( 1 , )] = 1

df.loc[( 2017 , ), ( 2 , )] = 1

ax = plt.gca()

plt.spy(df)

xbase = len (bands)

xoffset = xbase / 2

xlabels = df.columns.get_level_values( 'day' )

ax.xaxis.set_major_locator(IndexLocator(base = xbase,

`` offset = xoffset))

ax.xaxis.set_major_formatter(IndexFormatter(xlabels))

plt.xlabel( 'Day' )

ax.xaxis.tick_bottom()

ybase = len (fields)

yoffset = ybase / 2

ylabels = df.index.get_level_values( 'year' )

ax.yaxis.set_major_locator(IndexLocator(base = ybase,

`` offset = yoffset))

ax.yaxis.set_major_formatter(IndexFormatter(ylabels))

plt.ylabel( 'Year' )

plt.show()