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