Соотношение размеров таблицы и фигуры в матплотлибе - PullRequest
3 голосов
/ 13 апреля 2019

Я не могу понять, как "синхронизировать" размеры таблицы и фигуры, чтобы таблица полностью лежала внутри фигуры.

import matplotlib.pyplot as plt
from string import ascii_uppercase
from random import choice

#content for the table
height = 9
width = 9
grid = [[choice(ascii_uppercase) for j in range(width)] for i in range(height)]

#desired size of a cell
cell_size = 0.3

fig = plt.figure(figsize=(width * cell_size, height * cell_size))
ax = fig.add_subplot(1, 1, 1)

the_table = ax.table(cellText=grid, loc='center')

for pos, cell in the_table._cells.items():
    cell._height = cell._width = cell_size

plt.show()

output

Насколько я понимаю, область в пределах оси (+ некоторые внешние поля) равна фигуре - когда я сохраняю ее как файл изображения, она сохраняет только эту область, обрезая все остальные, и размер изображения 194x194, что соответствует размеру рисунка и DPI:

fig.get_size_inches()
>>array([2.7, 2.7])
fig.dpi
>>72.0

Итак, я предполагаю, что мой вопрос: когда я устанавливаю размер ячейки в таблице, не так ли это в дюймах (так же, как для размера фигуры)? Или DPI для таблицы отличается? Я не смог найти связанные с dpi методы или атрибуты для класса matplotlib.table.Table.

1 Ответ

1 голос
/ 13 апреля 2019

Ширина ячеек по умолчанию автоматически регулируется, чтобы соответствовать ширине осей, если loc="center".
Осталось только установить высоту ячеек.Это дается в единицах координат осей.Таким образом, чтобы заполнить полную высоту осей (== 1 в координатах осей), вы можете разделить 1 на количество строк в таблице, чтобы получить высоту каждой ячейки.Затем установите высоту для всех ячеек.

import matplotlib.pyplot as plt
from string import ascii_uppercase
from random import choice

#content for the table
height = 9
width = 9
grid = [[choice(ascii_uppercase) for j in range(width)] for i in range(height)]


fig, ax  = plt.subplots()
#ax.plot([0,2])

the_table = ax.table(cellText=grid, loc='center')
the_table.auto_set_font_size(False)

cell_height = 1 / len(grid)
for pos, cell in the_table.get_celld().items():
    cell.set_height(cell_height)

plt.show()

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...