Friday, 15 March 2013

python - Formatting issues with table image -



python - Formatting issues with table image -

so main issues having table coloring in ('#eeece1') color , formatting there no white area around it. way, can insert ppt. doc. without looking off border , space.

i have next code:

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')

which gives me this:

any suggestions?

your problem seems axes. have big white axis area around table, , png created tight borders around axis, not table. removing axis background colour helps bit:

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

gets transparent graph area. point transparent bg should remain transparent in ppt well. way specify transparency when create subplot:

add_subplot(111, axisbg='none')

then have adjust axis position relative figure, example:

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

to fill whole figure.

the cell colours can set when creating table, seems bit clumsy:

tbl=plt.table(celltext=data, cellcolours=[["#eeece1"] * len(data[0])]*len(data))

n.b. @ to the lowest degree matplotlib buggy here, see end of answer.

so, along these lines:

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')

this should produce table transparent background. if want have background colour cells, alter "none" in cellcolours. kw args rowcolours , colcolours determine colours behind column , row labels. if want set background whole image, alter in axisbg argument of add_subplot.

and warned: seems different versions of matplotlib bit different things scaling.

update: there may bug in table.py in mill function table... seems if both colcolors , collabels defined, cell offset 0, , rows jump wrong place.

the workaround ugly hack, but:

table = ax.table(celltext=data, collabels=cols, rowlabels=rows, loc='upper center',cellloc='center') cidx in table._cells: table._cells[cidx].set_facecolor('none')

will do. table._cells dictionary of cells (which built on rectangle class). same trick enables whatever fancy colouring cell faces or edges, , dict keys cell coordinates.

python table matplotlib formatting

No comments:

Post a Comment