2010-02-22 65 views

回答

1

這絕對是TeX的輸出。學習足夠的TeX(or, better yet, LaTeX)需要60分鐘才能吐出類似的表格。

+0

很抱歉的混亂 - 但我想要創建看起來像這張表的PNG文件(或任何形式的圖像格式)。我正在用Python編寫一個項目,我想用Python創建不同結果的比較表。我不知道如何繪製像桌子一樣的東西。 – Lyyli

+0

一種方法是輸出用於生成該表的LaTeX命令,然後在輸出上調用LaTeX以生成表。不過,這可能是過度殺傷力。 – McPherrinM

+0

是的。如果您使用LaTeX,請按照我鏈接到的頁面上的說明進行操作,您將獲得與您顯示的圖像相同的結果。 LaTeX是一個帶有文本輸入的排版系統。你的程序會吐出LaTeX源代碼,然後在該源代碼上運行LaTeX,生成如上圖所示的表格。 –

0

Reportlab擁有一些用於創建和格式化表格的強大工具。從您的角度來看,唯一的缺點是它輸出爲PDF,所以您需要一箇中間步驟將輸出轉換爲PNG。查看Reportlab User Guide以獲取有關Reportlab表的更多信息。

下面是一些代碼,我掀起了這將創造非常相似,你的榜樣形象的東西:

from reportlab.pdfgen.canvas import Canvas 
from reportlab.platypus import Frame, Table 
from reportlab.lib.units import mm 
from reportlab.lib.colors import black 

canvas = Canvas("table_test.pdf") 
frame = Frame(10*mm, 10*mm, 190*mm, 280*mm) 

# Some mock data for the table. The data must be supplied as a list of lists: 
table_data = [['Datasets', 'COL1', 'COL2', 'COL3', 'COL4', 'COL5'], 
      ['ROW0', 
       u'6.43 \xb1 4.72', 
       u'6.16 \xb1 3.83', 
       u'2.79 \xb1 5.43', 
       u'19.08 \xb1 1.12', 
       u'1.76 \xb1 4.88'], 
      ['ROW1', 
       u'1.09 \xb1 2.42', 
       u'11.51 \xb1 1.29', 
       u'10.14 \xb1 0.76', 
       u'10.09 \xb1 0.63', 
       u'27.16 \xb1 3.88'], 
      ['ROW2', 
       u'0.88 \xb1 5.83', 
       u'23.13 \xb1 4.54', 
       u'8.96 \xb1 4.94', 
       u'4.30 \xb1 0.30', 
       u'13.20 \xb1 1.31'], 
      ['ROW3', 
       u'22.87 \xb1 2.22', 
       u'8.56 \xb1 0.91', 
       u'6.36 \xb1 1.69', 
       u'4.30 \xb1 4.74', 
       u'12.39 \xb1 3.49'], 
      ['ROW4', 
       u'14.35 \xb1 5.04', 
       u'15.29 \xb1 2.17', 
       u'8.39 \xb1 3.05', 
       u'11.38 \xb1 3.02', 
       u'10.21 \xb1 4.23']] 

table_style = [("BOX", (0, 0), (-1, -1), 0.5, black), # box around table 
       ("LINEBELOW", (0, 0), (-1, 0), 0.5, black), # line under header 
       ("LINEAFTER", (0, 0), (0, -1), 0.5, black), # vertical line 
       ("LINEAFTER", (1, 0), (1, -1), 0.5, black), # vertical line 
       ("LINEAFTER", (2, 0), (2, -1), 0.5, black), # vertical line 
       ("LINEAFTER", (3, 0), (3, -1), 0.5, black), # vertical line 
       ("LINEAFTER", (4, 0), (4, -1), 0.5, black), # vertical line 
       ] 

table = Table(table_data, style=table_style) 
frame.add(table, canvas) 
canvas.save()