Harriet's heatmap code... Keep this in the learning python folder since I can imagine using it again. 31 March 2016


In [3]:
#start by generating random data...use that figure figure out what I want from Harriet's code

In [6]:
import pandas as pd
import palettable as pal
import palettable.colorbrewer as b2m
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.colors import LogNorm, NoNorm, BoundaryNorm

%matplotlib inline

In [2]:
forCols = list('ABCD')

In [3]:
# df = pd.DataFrame(np.random.randint(0,100,size=(100, 4)), columns=list('ABCD'))
df = pd.DataFrame(np.random.randint(0,1000,size=(11, 4)), columns=forCols)

In [5]:
type(df)


Out[5]:
pandas.core.frame.DataFrame

In [ ]:


In [52]:
#can sort the data to make the figure look 'nicer':
df['mean']=df.mean(skipna=1, axis=1) #calculate mean value for each class
df=df.sort(columns='mean', ascending=False)
df=df.drop('mean',1) #drop mean column
df=df.loc[df.sum(axis=1)!=0] ##get rid of the rows with no data (sum=0)

In [53]:
def HeatMap(heatmapData, columns=None,colormap=b2m.sequential.GnBu_9.get_mpl_colormap(), m=1e-5):

    heatmapData['mean']=heatmapData.mean(skipna=1, axis=1) #calculate mean value for each class

    heatmapData=heatmapData.sort(columns='mean', ascending=False)#Sort by the mean value

    heatmapData=heatmapData.drop('mean',1) #drop mean column
    heatmapData=heatmapData.loc[heatmapData.sum(axis=1)!=0]

    col_labels=list(heatmapData.index)
    row_labels=list(heatmapData.columns.values)
    fig3,ax3=plt.subplots()
    fig3.set_figheight(len(col_labels)/3)
    fig3.set_figwidth(len(row_labels))
    heatmap3 = ax3.pcolor(heatmapData, cmap=colormap)
    #heatmap3 = ax3.pcolor(heatmapData, cmap=colormap, norm=NoNorm(vmin=m, vmax=heatmapData.max().max()))
    #heatmap3 = ax3.pcolor(All_insitu_Percent, cmap=colormap, norm=LogNorm(vmin=m, vmax=All_insitu_Percent.max().max()))
    ax3.set_xticks(np.arange(heatmapData.shape[1])+0.5, minor=False)
    ax3.set_yticks(np.arange(heatmapData.shape[0])+0.5, minor=False)
    ax3.invert_yaxis()
    ax3.xaxis.tick_top()
    ax3.margins(0,0)

    ax3.set_xticklabels(row_labels, minor=False)
    ax3.set_yticklabels(col_labels, minor=False)
    plt.colorbar(heatmap3)
    plt.show()
    return fig3


#Insitu_HeatMap.savefig('Insitu_KEGG_Heatmap.pdf')
Testing=HeatMap(df, columns=forCols)



In [ ]:


In [8]:
def HeatMap(heatmapData, columns=None,colormap=b2m.sequential.GnBu_9.get_mpl_colormap(), m=1e-5):

    heatmapData['mean']=heatmapData.mean(skipna=1, axis=1) #calculate mean value for each class

    heatmapData=heatmapData.sort_values(by ='mean', ascending=False)#Sort by the mean value

    heatmapData=heatmapData.drop('mean',1) #drop mean column
    heatmapData=heatmapData.loc[heatmapData.sum(axis=1)!=0]

    col_labels=list(heatmapData.index)
    row_labels=list(heatmapData.columns.values)
    fig3,ax3=plt.subplots()
    fig3.set_figheight(len(col_labels)/3)
    fig3.set_figwidth(len(row_labels))

    #this works, but looks like one color until I start increasing ncolors to bigger numbers...
    bounds = np.linspace(heatmapData.min().min() ,heatmapData.max().max())
    heatmap3 = ax3.pcolor(heatmapData, cmap=colormap, norm=BoundaryNorm(boundaries = bounds,ncolors=300))
    
    ax3.set_xticks(np.arange(heatmapData.shape[1])+0.5, minor=False)
    ax3.set_yticks(np.arange(heatmapData.shape[0])+0.5, minor=False)
    ax3.invert_yaxis()
    ax3.xaxis.tick_top()
    ax3.margins(0,0)

    ax3.set_xticklabels(row_labels, minor=False)
    ax3.set_yticklabels(col_labels, minor=False)
    plt.colorbar(heatmap3)
    plt.show()
    return fig3


#Insitu_HeatMap.savefig('Insitu_KEGG_Heatmap.pdf')
Testing=HeatMap(df, columns=forCols)



In [ ]: