我无法弄清楚如何“同步”表和图形的大小,以使表完全位于图形内。
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()
我的理解是,轴内的区域(加上一些外部边缘)是图形-当我将其保存为图像文件时,它仅保存该区域,裁剪所有其余区域,然后图片尺寸为194x194,与图形尺寸和DPI相匹配:
fig.get_size_inches()
>>array([2.7, 2.7])
fig.dpi
>>72.0
所以我想我的问题是,当我在表格中设置单元格大小时,它不是以英寸为单位(与图形大小相同)吗?还是表的DPI不同?我找不到与dpi相关的方法或matplotlib.table.Table类的属性。
答案 0 :(得分:1)
默认情况下,如果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()