4

matplotlib テーブルの個々の列の幅を指定する方法はありますか?

テーブルの最初の列には 2 ~ 3 桁の ID しか含まれていません。この列を他の列よりも小さくしたいのですが、うまく機能しないようです。

次のようなテーブルがあるとします。

import matplotlib.pyplot as plt

fig = plt.figure()
table_ax = fig.add_subplot(1,1,1)

table_content = [["1", "Daisy", "ill"],
                 ["2", "Topsy", "healthy"]]
table_header = ('ID', 'Name','Status')

the_table = table_ax.table(cellText=table_content, loc='center', colLabels=table_header, cellLoc='left')

fig.show()

(奇妙なトリミングは気にしないでください。実際のテーブルでは発生しません。)

私が試したのはこれです:

prop = the_table.properties()
cells = prop['child_artists']

for cell in cells:
    text = cell.get_text()
    if text == "ID":
        cell.set_width(0.1)
    else:
        try:
            int(text)
            cell.set_width(0.1)
        except TypeError:
            pass

上記のコードは効果がないようです - 列はまだすべて同じ幅です。(をcell.get_width()返す0.3333333333ので、それは確かにセル幅だと思いますwidth...では、何が間違っているのでしょうか?

どんな助けでも大歓迎です!

4

3 に答える 3

12

私は何度も何度もウェブを検索して、同様の問題の解決策を探してきました。いくつかの答えを見つけて使用しましたが、簡単には見つかりませんでした。たまたま、さまざまなテーブル メソッドを試してみたときに、テーブル メソッド get_celld を見つけました。これを使用すると、キーがセル位置に関するテーブル座標に対応するタプルであるディクショナリが得られます。だから書くことで

cellDict=the_table.get_celld()
cellDict[(0,0)].set_width(0.1)

左上のセルを指定するだけです。これで、行または列のループがかなり簡単になります。

少し遅い答えですが、うまくいけば他の人が助けられるかもしれません。

于 2013-11-29T09:24:47.543 に答える
1

文字列ではなくオブジェクトを返すため、条件text=="ID"は常にです。Falsecell.get_text()Text

for cell in cells:
    text = cell.get_text()
    print text, text=="ID"  # <==== here
    if text == "ID":
        cell.set_width(0.1)
    else:
        try:
            int(text)
            cell.set_width(0.1)
        except TypeError:
            pass

一方、cells直接アドレスを指定すると、次のように動作します: try cells[0].set_width(0.5).

編集:Textオブジェクトget_text()自体に属性があるため、セルの文字列を取得するには、次のようにします。

    text = cell.get_text().get_text() # yup, looks weird
    if text == "ID":
于 2012-09-19T09:42:08.460 に答える