Создание таблиц в matplotlib

я пытаюсь сделать таблицу, используя Matplotlib и ямне удалось получить мои данные, но ям борется с окончательным форматированием. Мне нужно отредактировать размер рисунка, чтобы он включал все мои данные, так как некоторые из них отрубались. Вот мой текущий код:

for struct, energy, density in clust_data:
    fig=plt.figure()
    ax = plt.gca()
    ax.xaxis.set_visible(False)
    ax.yaxis.set_visible(False)
    colLabels=("Structure", "Energy", "Density")
    rows=len(clust_data)
    cellText=[]
    for row in clust_data:
        cellText.append(row)
    the_table = ax.table(cellText=cellText,
              colLabels=colLabels,
              loc='center')
    plt.savefig("table.png")

Который создает таблицу так (яя тоже не совсем уверен, как пройти через ряды):

Любая помощь с благодарностью!

 Francesco Montesano21 июн. 2013 г., 16:09
[Это не ответ] Выделаем двойной цикл над тем же списком (clust_data) и внешний цикл не делает ничего, кроме создания и сохраненияlen(clust_data): первый цикл for опечатка?

Ответы на вопрос(2)

Решение Вопроса

выполнив следующие действия:

Размер рисунка (редактировать):

Измерьте, насколько высокая и широкая клетка (например,)hcell=0.3wcell=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")
 Jsg9121 июн. 2013 г., 17:44
Так что выше и ниже таблицы много пробелов, я должен увеличить, чтобы разобрать какие-либо детали
 Jsg9121 июн. 2013 г., 17:24
Огромное спасибо большое! Как бы я удалил пробелы в верхней и нижней части таблицы?
 Francesco Montesano12 сент. 2017 г., 22:22
@ Роберто: спасибо, что заметили это. Исправлена.
 Francesco Montesano21 июн. 2013 г., 17:10
см редактировать ямы только что сделали
 Joe Kington21 июн. 2013 г., 17:51
@ Jsg91 - попробуйте использоватьfig.savefig('table.png', bbox_inches='tight', bbox_extra_artists=[table]) удалить пробел. (Это также будет обрезать "из" фигуры. Если таблица выходит за границы рисунка, на сохраненном изображении будет показана вся таблица, а не только то, что выбуду видеть, если вы сделалиplt.show().)
 Francesco Montesano21 июн. 2013 г., 17:31
@JoeKington: спасибо. Я не'не знаю об этом. Я'обновлю свой ответ (снова)
 Francesco Montesano21 июн. 2013 г., 17:35
@ Jsg91: что ты имеешь в виду?
 Jsg9121 июн. 2013 г., 17:07
Спасибо за обширную помощь! Это решает проблему с шипами, но все еще неt, включая весь мой набор данных, должны быть строки как выше, так и ниже пределов таблицы EDIT. Также clust_data - это всего лишь один список, который содержит 3 значения на элемент (x, y, z)
 Roberto12 сент. 2017 г., 21:04
@FrancescoMontesano - спасибо! Как вы знаете, в коде Simple Way есть опечатка:len(colLables) должно бытьlen(colLabels)
 xheyhenry02 нояб. 2016 г., 01:14
@FrancescoMontesano I 'Я попробовал все это, и по какой-то причине мой стол все еще очень маленький, иТонна пустого пространства над таблицей. Пробел над таблицей также увеличивается с количеством строк. В результате получается таблица с большим количеством пробелов над ней, затем заголовок, который выглядит очень отделенным от таблицы. Кроме того, текст выглядит очень маленьким. Есть какие-нибудь подсказки?
 Joe Kington21 июн. 2013 г., 17:16
@FrancescoMontesano - Ты неНе нужно прыгать через столько обручей, чтобы скрыть вещи. Половина вашего примера кода может быть заменена наax.axis('off'), Вы можете оставить все,set_visible(False)set_color('w') а также .set_zorder(...)

ли вы попробуете этот код,

import matplotlib.pyplot as plt
import numpy as np

table = r'\begin{table} \begin{tabular}{|l|l|l|}  \hline  $\alpha$      & $\beta$        & $\gamma$      \\ \hline   32     & $\alpha$ & 123    \\ \hline   200 & 321    & 50 \\  \hline  \end{tabular} \end{table}'
plt.plot(np.arange(100))
plt.text(10,80,table, size=50)
plt.show()

Вы увидите красивую таблицу в верхнем левом углу графика. Теперь почти просто написать функцию для преобразования ваших данных в строку, как в предыдущей латексной таблице.

 CompEcon14 сент. 2015 г., 14:34
самый маленький из кавычек - я думаю, вам нужно добавить строки import matplotlib как mpl; mpl.rc (»текст', usetex = True), чтобы убедиться, что латекс рендерится. Хорошее решение однако!
 CompEcon18 сент. 2015 г., 17:00
К сожалению, я часто оказываюсь в ситуации, когда я отправляю файлы с одним кодом пользователям, которым они нужны »просто работай" когда они их запускают. (так в моем коде, также переключатель, чтобы полностью не использовать латекс, если их машина нет) Такова жизнь, я полагаю ...
 Alejandro16 сент. 2015 г., 19:32
да, этоверно. Хотя я рекомендую изменить эти строки в файле matplotlibrc.

Ваш ответ на вопрос