2012-07-24 12 views
5

私はパンダのデータフレームを持っており、それをmatplotlibテーブルとしてプロットしたいと思います。これまでのところ、私はその部分は、次のコードで作業しています。このの終わりにmatplotlib:カラーマップを使用して表のセルの背景を塗りつぶす

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 

私はカラーマップによると、セルの背景色を設定したいと思います - しかし、私は、CLMでそれをどのように調べるのですインデックスのない配列?

もう1つの質問:何とかフォーマット文字列をテーブルに渡して、小数点以下2桁にフォーマットすることはできますか?感謝

任意のヒント、 アンディ

答えて

9

あなたはあなたのデータを正規化するノーマライズオブジェクトを作成し、色を取得するために、カラーマップオブジェクトに正規化データを渡すために)(plt.normalizeを使用することができます。

plt.table()には、すべてのセルの背景色を設定するcellColours引数があります。

cm.hotカラーマップは最小値に黒色を使用するため、normalizeオブジェクトを作成するときに値の範囲を大きくしました。

ここ

コードです:

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

アンディのコード作業:

#!/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() 
関連する問題