格式化表格图像的问题

时间:2014-06-21 17:04:51

标签: python matplotlib formatting

因此,我对表格的主要问题是将其完全填入('#EEECE1')颜色并对其进行格式化,以使其周围没有白色区域。这样,我可以轻松地将其插入到ppt中。文档。没有它与边界和额外的空间看。

我有以下代码:

def tables():
    data=[[10,10,10,5,5,5,2,2,2,4,4,4,4,4,4,5,5,5],[10,10,10,5,5,5,2,2,2,4,4,4,4,4,4,5,5,5],[10,10,10,5,5,5,2,2,2,4,4,4,4,4,4,5,5,5],[10,10,10,5,5,5,2,2,2,4,4,4,4,4,4,5,5,5]]
    fig= plt.figure()
    ax = fig.add_subplot(111)
    ax.axis('off')
    rows=['AB','BC','SK','MB']
    cols=["Gas", "Wk/Wk", "Yr/Yr","Oil", "Wk/Wk", "Yr/Yr","Bit", "Wk/Wk", "Yr/Yr","Total", "Wk/Wk", "Yr/Yr","Hor", "Wk/Wk", "Yr/Yr","Vert/Dir", "Wk/Wk", "Yr/Yr"]
    table = ax.table(cellText=data, colLabels=cols,rowLabels=rows, loc='upper center',cellLoc='center')
    table.auto_set_font_size(True)
    table.scale(1.5,1.5)
    plt.savefig(filenameTemplate2, format='png',bbox_inches='tight')

这给了我这个:

enter image description here

有什么建议吗?

3 个答案:

答案 0 :(得分:2)

您的问题似乎与轴有关。您的桌子周围有一个很大的白轴区域,而png是围绕轴而不是桌子的紧密边框创建的。删除轴背景颜色有点帮助:

ax.set_axisbgcolor((0,0,0,0))

为您提供透明图表区域。具有透明bg的点是它也应该在PPT中保持透明。另一种指定透明度的方法是在创建子图时:

add_subplot(111, axisbg='none')

然后您还必须相对于图调整轴位置,例如:

ax.set_position([0, 0, 1, 1])

填补整个数字。

创建表格时可以设置单元格颜色,但它看起来有点笨拙:

tbl=plt.table(cellText=data, cellColours=[["#EEECE1"] * len(data[0])]*len(data))

N.B。至少我的matplotlib在这里有错误,请参阅答案的结尾。


所以,沿着这些方向:

data=[[10,10,10,5,5,5,2,2,2,4,4,4,4,4,4,5,5,5],[10,10,10,5,5,5,2,2,2,4,4,4,4,4,4,5,5,5],[10,10,10,5,5,5,2,2,2,4,4,4,4,4,4,5,5,5],[10,10,10,5,5,5,2,2,2,4,4,4,4,4,4,5,5,5]]
fig = plt.figure(figsize=(6,2))
ax = fig.add_subplot(111, axisbg='none')
ax.axis('off')
ax.set_position([0, 0, 1, 1])
rows=['AB','BC','SK','MB']
cols=["Gas", "Wk/Wk", "Yr/Yr","Oil", "Wk/Wk", "Yr/Yr","Bit", "Wk/Wk", "Yr/Yr","Total", "Wk/Wk", "Yr/Yr","Hor", "Wk/Wk", "Yr/Yr","Vert/Dir", "Wk/Wk", "Yr/Yr"]
table = ax.table(cellText=data, colLabels=cols, rowLabels=rows, rowColours=['none']*len(data), colColours=['none']*len(data[0]), loc='upper center',cellLoc='center', cellColours=[["none"] * len(data[0])] * len(data))
table.auto_set_font_size(True)
table.scale(1.5, 1.5)
plt.savefig("test.png", format='png',bbox_inches='tight')

这应该会生成一个完全透明背景的表格。如果要为单元格设置背景颜色,请更改cellColours中的“无”。 Kw args rowColourscolColours确定列和行标签后面的颜色。如果要为整个图像设置背景,请在axisbg的{​​{1}}参数中进行更改。

并警告:似乎不同版本的matplotlib在缩放方面做了一些不同的事情。

更新:工厂职能add_subplot中的table.py可能存在错误......如果同时定义了tablecolColors,则单元格偏移量为0,行跳到错误的地方。

解决方法是一个丑陋的黑客,但是:

colLabels

会做的。 table = ax.table(cellText=data, colLabels=cols, rowLabels=rows, loc='upper center',cellLoc='center') for cidx in table._cells: table._cells[cidx].set_facecolor('none') 是一个单元格词典(构建在table._cells类上)。同样的技巧使您可以为单元格面或边缘执行任何奇特的着色,并且dict键是单元格坐标。

答案 1 :(得分:1)

这里有一些问题:

首先是虽然你有ax.axes('off),但这只是关闭了轴上的线条和标签的绘制,但是没有移除轴,这导致了所有的空白区域在桌子下面。为了解决这个问题,我不知道如何完全关闭轴的绘制,但是一个kludge是使得纵横比小于表,然后扩展表但是相同的比例(参见下面的示例)。

对于颜色,需要牢记:1)轴颜色和图形颜色不同(例如,在通常的gui显示中,图形颜色为灰色,轴为白色); 2)保存的图形中的图形颜色与显示的图形不同,需要直接在savefig中设置。

最后,您可能希望在此处使用透明度,而不是您明确要求的颜色(例如,在savefig中设置关键字transparent=True),但这取决于您的具体情况。之后再说这个数字,以及是否支持透明度,所以我只是按你提出的方式回答关于颜色的问题。

这是图和代码:

enter image description here

data=[[10,10,10,5,5,5,2,2,2,4,4,4,4,4,4,5,5,5],[10,10,10,5,5,5,2,2,2,4,4,4,4,4,4,5,5,5],[10,10,10,5,5,5,2,2,2,4,4,4,4,4,4,5,5,5],[10,10,10,5,5,5,2,2,2,4,4,4,4,4,4,5,5,5]]
fig = plt.figure()
ax = fig.add_subplot(111)
ax.axis('off')
ax.set_aspect(.1)
rows=['AB','BC','SK','MB']
cols=["Gas", "Wk/Wk", "Yr/Yr","Oil", "Wk/Wk", "Yr/Yr","Bit", "Wk/Wk", "Yr/Yr","Total", "Wk/Wk", "Yr/Yr","Hor", "Wk/Wk", "Yr/Yr","Vert/Dir", "Wk/Wk", "Yr/Yr"]
table = ax.table(cellText=data, colLabels=cols,rowLabels=rows, loc='upper center',cellLoc='center')
table.auto_set_font_size(True)
table.scale(1.5,15.)
plt.savefig("test.png", format='png',bbox_inches='tight', facecolor='#EEECE1', transparent=True)

答案 2 :(得分:0)

您可以尝试:.set_backgroundcolor('#EEECE1')您可能需要将其设置在桌子,斧头或无花果上。