Подтвердить что ты не робот

Создание таблиц в 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")

Который создает таблицу, подобную этой (я не совсем уверен, как проехать по линиям через определенные строки): enter image description here

Любая помощь очень ценится!

4b9b3361

Ответ 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")

Ответ 2

Это просто любопытство. Вы можете распечатать таблицу из латекса. Если вы попробуете этот код,

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

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