In [17]:
import numpy as np
import pandas as pd
from bokeh.plotting import figure, show, output_notebook, output_file
from bokeh.palettes import Viridis256
from bokeh.models import ColumnDataSource, ColorBar, LinearColorMapper, HoverTool
from bokeh.sampledata.autompg import autompg
In [144]:
cols = list( autompg.corr().columns)
corr_matrix = np.asmatrix( autompg.corr())

N = len(cols)
x = []
y = []
c = [] 
c_abs = []
minus = ['-']*N**2
size = [ '25pt']*N**2

for i in range(N):
    for j in range(N):
        x.append( cols[ j])
        y.append( cols[ i])
        c.append( corr_matrix[ i, j])
        c_abs.append( abs( corr_matrix[ i, j]))

data = pd.DataFrame({ 'x': x, 'y': y, 'c':c, 'c_abs': c_abs, 'minus': minus, 'size': size})
In [153]:
mapper = LinearColorMapper( palette=Viridis256[ ::-1], low=0, high=1)
colors= { 'field': 'c_abs', 'transform': mapper}
color_bar = ColorBar( color_mapper=mapper, location=( 0, 0))

p = figure( toolbar_location='above', tools='hover, save', x_range=cols, y_range=cols, title="Auto MPG Correlations")

source = ColumnDataSource( data)
p.rect( 'x', 'y', source= data, fill_color=colors, line_color=None, width=1, height=1)

p.cross( 'x', 'y', source= data.query( "c > 0"), size=10, color='black', line_width=2)
p.text( 'x', 'y', text='minus', source= data.query( "c < 0"), 
        color='black', text_font_size='size', y_offset=16, x_offset=-5)

p.add_layout( color_bar, 'right')
p.select_one( HoverTool).tooltips = [( 'correlation: ', '@c'),]

output_notebook()
show( p)
Loading BokehJS ...