# Make reverse diagonals white in heatmap

### Question

I'm trying to do something as seen on the image is given below,

Just setting reverse diagonals white color is left. I couldn't set them as white. The chart takes integer values and I don't know what integer value is corresponding of white color.

Thank!

Edited:

Here is the code;

``````import math
from matplotlib import pyplot as plt
from matplotlib import cm as cm
import pylab
import numpy as np
from matplotlib.collections import LineCollection

class HeatMap:
def __init__(self, selectedLines):
self.selectedLines = selectedLines

def getHeapMap(self):
figure = plt.figure()

if len(self.selectedLines) != 0:

self.map = self.createTestMapData(len(self.selectedLines),                len(self.selectedLines))

maxValueInMap = self.findMaxValueInMap(self.map)

x = np.arange(maxValueInMap + 1)
ys = [x + i for i in x]
ax.imshow(self.map, cmap=cm.jet, interpolation='nearest')

'''
Left side label of the chart is created according to selected values
from a checkbox group.
'''
leftSideLabelSize = len(self.selectedLines)
sideLabels = []
for line in self.selectedLines:
sideLabels.append(line.text())
pos = np.arange(leftSideLabelSize)
'''
Left side labels are set with the code below.
'''
pylab.yticks(pos, sideLabels)
plt.xticks(pos, sideLabels)
self.numrows, self.numcols = self.map.shape
ax.format_coord = self.format_coord

line_segments = LineCollection([zip(x, y) for y in ys],
linewidths=(0.5, 3, 1.5, 2),
linestyles='solid')
line_segments.set_array(x)
axcb = figure.colorbar(line_segments)

return figure

def format_coord(self, x, y):
col = int(x + 0.5)
row = int(y + 0.5)
if col >= 0 and col < self.numcols and row >= 0 and row < self.numrows:
z = self.map[row, col]
return 'x=%1.4f, y=%1.4f, z=%1.4f' % (x, y, z)
else:
return 'x=%1.4f, y=%1.4f' % (x, y)

def createTestMapData(self, xSize, ySize):
resultMap = 10 * np.random.rand(xSize, ySize)
#Setting reverse diagonal is here. Now it is set with zero but it gives blue.
# I want it to be set as white
for index in range(0, int(math.sqrt(resultMap.size))):
resultMap[index][((math.sqrt(resultMap.size) - 1) - index )] = 0
return  resultMap

def findMaxValueInMap(self, map):
return np.amax(map)
``````

The values are generated randomly at the moment. The code is above gives a gui like;

1
9
3/18/2015 2:17:47 PM

You can make your own colormap, or adjust an existing one :)

Here's the code for the above plot, with explainations in the comments:

``````import matplotlib
from pylab import *
import numpy as np

#Create test data with zero valued diagonal:
data = np.random.random_sample((25, 25))
rows, cols = np.indices((25,25))
data[np.diag(rows, k=0), np.diag(cols, k=0)] = 0

#Create new colormap, with white for zero
#(can also take RGB values, like (255,255,255):
colors = [('white')] + [(cm.jet(i)) for i in xrange(1,256)]
new_map = matplotlib.colors.LinearSegmentedColormap.from_list('new_map', colors, N=256)

pcolor(data, cmap=new_map)
colorbar()
savefig('map.png')
show()
``````

``````#Create test data:
data = np.random.random_sample((25, 25))
#for this to work we use pcolormesh instead of pcolor:
colorbar()
show()
``````

This produces essentially the same result, but may suit your needs better as you can set any cell to white, and also the white doesn't show up on the colorbar (see very bottom of above colorbar):

8
6/11/2012 8:09:46 AM

The colormap is defined by the `cmap` argument in `ax.imshow()`. You have used the `jet` colormap so you have `cmap=cm.jet`, which is just one of many built-in color maps in matplotlib. You may choose one or define your own that suits your taste.