Как назначить matplotlib.pyplot.table отдельным подзаголовкам?

#python #matplotlib

Вопрос:

Я пытаюсь напечатать серию таблиц на рисунке, используя matplotlib.pyplot.table , но я получаю таблицы, покрытые пустыми подзаголовками, как в этом примере:

введите описание изображения здесь

Код, который я сейчас использую, выглядит так:

 fig, axs = plt.subplots(4)
labels = ['One', 'Two', 'Three', 'Four']
frames = [df_1, df_2, df_3, df_4]
for (idx, label), tab in zip(enumerate(labels), frames):
                vals = tab.astype('str').values
                axs[idx].table(cellText=vals, rowLabels=tab.index,
                               colLabels=tab.columns)
 

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

    Tonnes      Fe       P    SiO2   Al2O3     LOI
0  613012  1.5422  1.3614  0.5025  0.7374  1.2856
1   11404  0.9654  0.9750  1.0866  0.8366  2.2400
2   13469  0.9792  0.9686  1.2066  0.7302  1.7702
 

Что я здесь делаю не так?

Ответ №1:

Чтобы справиться с этой ситуацией, вы можете задать положение таблицы для одного графика с помощью bbox=[left,bottom,width,height] . Затем вы можете установить интервал между подзаголовками. Я установил размер графика и отрегулировал каждый параметр вручную, потому что размер графика по умолчанию сворачивает фигуру.

 import matplotlib.pyplot as plt

fig, axs = plt.subplots(4, figsize=(6,9))
labels = ['One', 'Two', 'Three', 'Four']
df_1, df_2, df_3, df_4 = df.copy(),df.copy(),df.copy(),df.copy()

frames = [df_1, df_2, df_3, df_4]
for (idx, label), tab in zip(enumerate(labels), frames):
                vals = tab.astype('str').values
                axs[idx].table(cellText=vals,
                               rowLabels=tab.index,
                               colLabels=tab.columns,
                               loc='bottom',
                               bbox=[0.0,-2.75,1.0,2.0])
fig.subplots_adjust(hspace=3.0)
 

введите описание изображения здесь