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]:
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 [ ]: