2012-07-24 15 views
5

Mam pandasową ramkę danych Pand i chcę ją narysować jako tabelę matplotlib. Do tej pory ta część pracy z następującego kodu:matplotlib: używanie mapy kolorów do kolorowania tła komórki tabeli

import numpy as np 
randn = np.random.randn 
from pandas import * 

idx = Index(arange(1,11)) 
df = DataFrame(randn(10, 5), index=idx, columns=['A', 'B', 'C', 'D', 'E']) 
vals = np.around(df.values,2) 

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') 

table_props = the_table.properties() 
table_cells = table_props['child_artists'] 

clm = cm.hot(vals) 

for cell in table_cells: 
    cell.set_height(0.04) 
    # now i would like to set the backgroundcolor of the cell 

Pod koniec tego chciałbym ustawić background-color komórki zgodnie z mapą kolorów - ale jak mam to sprawdzić w CLM tablica bez indeksu?

Kolejne pytanie: czy mogę w jakiś sposób przekazać ciąg formatujący do tabeli, aby tekst był formatowany do 2 miejsc dziesiętnych?

Wszelkie wskazówki mile widziane, Andy

Odpowiedz

9

Można użyć plt.normalize(), aby utworzyć obiekt normalizacji do normalizacji danych i przekazać dane normalizować do obiektu colormap uzyskać kolory.

plt.table() ma argument CellColours, który ustawia kolor tła każdej komórki.

Ponieważ colormap cm.hot używa czarnego koloru dla minimalnej wartości, zwiększyłem zakres wartości podczas tworzenia normalizowanego obiektu.

Oto kod:

from matplotlib import pyplot as plt 
import numpy as np 
randn = np.random.randn 
from pandas import * 

idx = Index(arange(1,11)) 
df = DataFrame(randn(10, 5), index=idx, columns=['A', 'B', 'C', 'D', 'E']) 
vals = np.around(df.values,2) 
normal = plt.normalize(vals.min()-1, vals.max()+1) 

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=plt.cm.hot(normal(vals))) 

enter image description here

0

Andy Kod pracy:

#!/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() 
Powiązane problemy