Ответ 1
Вы должны решить свои проблемы, выполнив следующие действия:
-
Размер рисунка (изменить):
- Измерьте, как высокая и широкая ячейка (например,
hcell=0.3
,wcell=1
) - Получить/узнать количество строк и столбцов (в вашем случае
len(clust_data)+1
и 3) -
создайте фигуру с правильным размером (вам может понадобиться дополнительное дополнение)
fig = plt.figure(figsize=(3*wcell+wpad, nrows*hcell+hpad))
- Измерьте, как высокая и широкая ячейка (например,
-
Линии внутри двух рядов - это оси.
ax.xaxis.set_visible(False) ax.yaxis.set_visible(False)
просто скрыть метки оси и тики, а не оси. Вы должны скрыть их или покрасить их в белый цвет.
см. полное решение ниже
В любом случае: мне кажется, что вы делаете много бесполезных операций.
Из вашего фрагмента кода мне кажется, что clust_data
уже является списком списков с правильной формой и что cellText
после заполнения будет таким же, как и у clust_data
.
Кроме того, попробуйте не смешивать интерфейс OO и pyplot matplotlib.
Следующий код должен быть эквивалентен вашему
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")
Изменить: полное решение
Сконструированный способ
Вам нужно скрыть оси (например, их цвет белый) и дать им низкий zorder
, а затем добавить таблицу с более высоким 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")
Простой способ (кредит @JoeKington)
Просто выключите ось
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")