2010-02-22 67 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()