

pythonで表を図として出力したいと考えています。  
CSVでの出力はできるのですが、行内での改行や列幅の操作も必要ですので、  
後の編集の手間を考えると画像として表を作成したいです。  
何か便利（楽）な方法はありませんでしょうか。


CC BY-SA 3.0
2015-07-13T01:58:09.477
12310
2015-10-26T12:36:14.393
9451
question
python
pythonで表を作成する便利な方法は？


画像ではありませんが、端末に表を表示するなら[texttable](https://pypi.python.org/pypi/texttable)モジュールがあります。行内での改行や列幅の設定も可能です。

[code]

    table = Texttable()
    table.set_cols_align(["l", "r", "c"])
    table.set_cols_valign(["t", "m", "b"])
    table.add_rows([ ["Name", "Age", "Nickname"], 
                     ["Mr\nXavier\nHuon", 32, "Xav'"],
                     ["Mr\nBaptiste\nClement", 1, "Baby"] ])
    print table.draw() + "\n"
    
    table = Texttable()
    table.set_deco(Texttable.HEADER)
    table.set_cols_dtype(['t',  # text 
                          'f',  # float (decimal)
                          'e',  # float (exponent)
                          'i',  # integer
                          'a']) # automatic
    table.set_cols_align(["l", "r", "r", "r", "l"])
    table.add_rows([["text",    "float", "exp", "int", "auto"],
                    ["abcd",    "67",    654,   89,    128.001],
                    ["efghijk", 67.5434, .654,  89.6,  12800000000000000000000.00023],
                    ["lmn",     5e-78,   5e-78, 89.4,  .000000000000128],
                    ["opqrstu", .023,    5e+78, 92.,   12800000000000000000000]])
    print table.draw()
    
[/code]

Result:

[code]

    +----------+-----+----------+
    |   Name   | Age | Nickname |
    +==========+=====+==========+
    | Mr       |     |          |
    | Xavier   |  32 |          |
    | Huon     |     |   Xav'   |
    +----------+-----+----------+
    | Mr       |     |          |
    | Baptiste |   1 |          |
    | Clement  |     |   Baby   |
    +----------+-----+----------+
    
    text   float       exp      int     auto
    ===========================================
    abcd   67.000   6.540e+02   89    128.001
    efgh   67.543   6.540e-01   90    1.280e+22
    ijkl   0.000    5.000e-78   89    0.000
    mnop   0.023    5.000e+78   92    1.280e+22
    
[/code]


CC BY-SA 3.0
2015-07-15T01:43:49.527
12363
2015-07-15T01:43:49.527
7837
12310
answer


pandas.DataFrameを経由することでいくつかのフォーマットに出力しやすくなると思いますが、直接画像には出力できないようです。

[How to save the Pandas dataframe/series data as a
figure?](https://stackoverflow.com/questions/19726663/how-to-save-the-pandas-
dataframe-series-data-as-a-figure)  
でも述べられている通り、

  * LaTeXで出力してpdflatex等で変換
  * HTMLに変換してphantom.js等を用いて変換

としてはどうでしょうか。


CC BY-SA 3.0
2015-08-04T11:12:49.457
13029
2015-08-04T11:12:49.457
2017-05-23T12:38:56.467
-1
9572
12310
answer


以下のようにすれば `matplotlib` から画像として出力することはできます。  
が、画像として出力すると 列幅などの調整はむしろ手間になるのではないでしょうか。

[code]

    import pandas as pd
    import pandas.tools.plotting as plotting
    import matplotlib.pyplot as plt
    
    df = pd.DataFrame(np.random.randn(5, 5))
    
    fig, ax = plt.subplots(1, 1)
    plotting.table(ax, df, loc='center')
    ax.axis('off')
    plt.show()
    
[/code]

[![画像の説明をここに入力](https://i.stack.imgur.com/wdIea.png)](https://i.stack.imgur.com/wdIea.png)


CC BY-SA 3.0
2015-10-26T12:36:14.393
18089
2015-10-26T12:36:14.393
12966
12310
answer