You should be able to solve your problems doing the following:
Figure size (edit):
- Measure how high and wide is a cell (e.g.
hcell=0.3
, wcell=1
)
- Get/know the number of rows and columns (in your case
len(clust_data)+1
and 3)
create the figure with the correct size (you might want some extra padding)
fig = plt.figure(figsize=(3*wcell+wpad, nrows*hcell+hpad))
The lines within the two rows are the axes spines.
ax.xaxis.set_visible(False)
ax.yaxis.set_visible(False)
just hide the axis labels and ticks, not the axes spines.
You have to hide them or colour them in white
see full solution below
In any case: it looks to me that you are doing a whole lot of useless operations.
From your piece of code it seems to me that clust_data
is already a list of lists with the correct shape and that cellText
after being filled is going to be the same of clust_data
.
Furthermore, try not to mix the OO and pyplot interface of matplotlib.
The following code should be equivalent to yours
fig=plt.figure()
ax = fig.add_subplot(111)
ax.xaxis.set_visible(False)
ax.yaxis.set_visible(False)
colLabels=("Structure", "Energy", "Density")
the_table = ax.table(cellText=clust_data,
colLabels=colLabels,
loc='center')
plt.savefig("table.png")
Edit: full solution
Convoluted way
You have to hide the axes spines (e.g. setting their color white) and give them low zorder
then add the table with higher zorder
colLabels=("Structure", "Energy", "Density")
nrows, ncols = len(clust_data)+1, len(colLabels)
hcell, wcell = 0.3, 1.
hpad, wpad = 0, 0
fig=plt.figure(figsize=(ncols*wcell+wpad, nrows*hcell+hpad))
ax = fig.add_subplot(111)
#remove axis ticks and labels
ax.xaxis.set_visible(False)
ax.yaxis.set_visible(False)
#hide the spines
for sp in ax.spines.itervalues():
sp.set_color('w')
sp.set_zorder(0)
#do the table
the_table = ax.table(cellText=clust_data,
colLabels=colLabels,
loc='center')
#put the table in front of the axes spines
#for some reason zorder is not a keyword in ax.table
the_table.set_zorder(10)
plt.savefig("table.png")
Simple way (credit @JoeKington)
Just switch off the axis
colLabels=("Structure", "Energy", "Density")
nrows, ncols = len(clust_data)+1, len(colLabels)
hcell, wcell = 0.3, 1.
hpad, wpad = 0, 0
fig=plt.figure(figsize=(ncols*wcell+wpad, nrows*hcell+hpad))
ax = fig.add_subplot(111)
ax.axis('off')
#do the table
the_table = ax.table(cellText=clust_data,
colLabels=colLabels,
loc='center')
plt.savefig("table.png")