10

Pandas データフレームがあり、それを 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 桁にフォーマットすることはできますか?

ヒントをいただければ幸いです、アンディ

4

2 に答える 2

15

を使用plt.Normalize()してデータを正規化し、正規化されたデータをColormapオブジェクトに渡すことができますplt.cm.hot()

plt.table()には引数cellColoursがあり、セルの背景色を適宜設定するために使用されます。

黒を最小値にマップするためcm.hot、正規化オブジェクトを作成するときに値の範囲を増やしました。

コードは次のとおりです。

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

ここに画像の説明を入力

于 2012-07-24T02:44:10.293 に答える
0

Andy のコードの動作:

#!/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()
于 2014-07-03T13:41:01.170 に答える