I have a Pandas dataframe, and i want to plot it as matplotlib table. So far i have that part working with following code:
import numpy as np
randn = np.rand
The Andy's code working:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# sudo apt-get install python-pandas
# sudo apt-get install python-matplotlib
#
# python teste.py
from matplotlib import pyplot
from matplotlib import cm
import numpy
from pandas import *
idx = Index(numpy.arange(1, 11))
df = DataFrame(
numpy.random.randn(10, 5),
index=idx,
columns=['A', 'B', 'C', 'D', 'E']
)
vals = numpy.around(df.values, 2)
normal = pyplot.normalize(vals.min()-1, vals.max()+1)
fig = pyplot.figure(figsize=(15, 8))
ax = fig.add_subplot(111, frameon=True, xticks=[], yticks=[])
the_table = pyplot.table(
cellText=vals,
rowLabels=df.index,
colLabels=df.columns,
colWidths = [0.03]*vals.shape[1],
loc='center',
cellColours=pyplot.cm.hot(normal(vals))
)
pyplot.show()
You can use plt.Normalize() to normalize your data, and the pass the normalized data to a Colormap object, for example plt.cm.hot().
plt.table() has an argument cellColours
, which will be used to set the cells' background color accordingly.
Because cm.hot
maps black to the minimal value, I increased the value range when creating the normalization object.
Here is the code:
from matplotlib import pyplot as plt
import numpy as np
randn = np.random.randn
from pandas import *
idx = Index(np.arange(1,11))
df = DataFrame(randn(10, 5), index=idx, columns=['A', 'B', 'C', 'D', 'E'])
vals = np.around(df.values,2)
norm = plt.Normalize(vals.min()-1, vals.max()+1)
colours = plt.cm.hot(normal(vals))
fig = plt.figure(figsize=(15,8))
ax = fig.add_subplot(111, frameon=True, xticks=[], yticks=[])
the_table=plt.table(cellText=vals, rowLabels=df.index, colLabels=df.columns,
colWidths = [0.03]*vals.shape[1], loc='center',
cellColours=colours)
plt.show()