Source code for sequana.viz.imshow

# -*- coding: utf-8 -*-
#
#  This file is part of Sequana software
#
#  Copyright (c) 2016 - Sequana Development Team
#
#  File author(s):
#      Thomas Cokelaer <thomas.cokelaer@pasteur.fr>
#
#  Distributed under the terms of the 3-clause BSD license.
#  The full license is in the LICENSE file, distributed with this software.
#
#  website: https://github.com/sequana/sequana
#  documentation: http://sequana.readthedocs.io
#
##############################################################################
"""Imshow utility"""
from sequana.lazy import pandas as pd
from sequana.lazy import pylab
from sequana.viz.core import VizInputSquare

__all__ = ["Imshow"]


[docs]class Imshow(VizInputSquare): """Wrapper around the matplotlib.imshow function Very similar to matplotlib but set interpolation to None, and aspect to automatic and accepts input as a dataframe, in whic case x and y labels are set automatically. .. plot:: :width: 80% :include-source: import pandas as pd data = dict([ (letter,np.random.randn(10)) for letter in 'ABCDEFGHIJK']) df = pd.DataFrame(data) from sequana.viz import Imshow im = Imshow(df) im.plot() """ def __init__(self, x, verbose=True): """.. rubric:: constructor :param x: input dataframe (or numpy matrix/array). Must be squared. """ super(Imshow, self).__init__(x, verbose=verbose)
[docs] def plot( self, interpolation="None", aspect="auto", cmap="hot", tight_layout=True, colorbar=True, fontsize_x=None, fontsize_y=None, rotation_x=90, xticks_on=True, yticks_on=True, **kargs ): """wrapper around imshow to plot a dataframe :param interpolation: set to None :param aspect: set to 'auto' :param cmap: colormap to be used. :param tight_layout: :param colorbar: add a colobar (default to True) :param fontsize_x: fontsize on xlabels :param fontsize_y: fontsize on ylabels :param rotation_x: rotate labels on xaxis :param xticks_on: switch off the xticks and labels :param yticks_on: switch off the yticks and labels """ data = self.df pylab.clf() pylab.imshow(data, interpolation=interpolation, aspect=aspect, cmap=cmap, **kargs) if fontsize_x == None: fontsize_x = 16 # FIXME use default values if fontsize_y == None: fontsize_y = 16 # FIXME use default values if yticks_on is True: pylab.yticks(range(0, len(data.index)), data.index, fontsize=fontsize_y) else: pylab.yticks([]) if xticks_on is True: pylab.xticks(range(0, len(data.columns[:])), data.columns, fontsize=fontsize_x, rotation=rotation_x) else: pylab.xticks([]) if colorbar is True: pylab.colorbar() if tight_layout: pylab.gcf().set_layout_engine("tight") # For some reasons, in newest version of python/mpl, this is required # for ylim, not for xlim y1, y2 = pylab.ylim() pylab.ylim([y1 + 0.5, y2 - 0.5])