Matplotlib Pyplot table使用scale加高单元格后如何垂直居中文本
Matplotlib 表格单元格文本垂直居中解决方法
scale()方法实现纵向拉伸时,仅对单元格的图形区域做坐标缩放,不会同步调整内部文本的垂直定位基准,因此会出现文本偏上、上下留白不均的问题,可通过以下两种方法解决:
方法一:手动设置单元格高度(推荐,效果最稳定)
不使用scale()做形变缩放,直接在布局层面设置单元格高度,表格原生的居中属性会自动让文本在固定尺寸的单元格内垂直居中,不会出现位置偏移。
完整实现代码:
import matplotlib.pyplot as plt fig, ax = plt.subplots() colLabels = ['col 0', 'col 1', 'col 2'] rowLabels = ['row 0', 'row 1', 'row 2'] tableData = [['123', '123', '123'], ['123', '123', '123'], ['123', '123', '123']] ax.set_axis_off() ax.title.set_text('Table Title') myTable = ax.table(cellText=tableData, rowLabels=rowLabels, colLabels=colLabels, cellLoc='center', rowLoc='center', loc='center') myTable.auto_set_font_size(False) myTable.set_fontsize(12) # 手动设置单元格高度,数值越大上下留白越多,0.2的高度和原代码scale(1,2)的视觉留白大小基本一致 set_height = 0.2 for _, cell in myTable.get_celld().items(): cell.set_height(set_height) plt.show() print('\n' + 'done !!' + '\n')
方法二:保留scale调用,手动修正文本位置
如果需要保留scale()的使用逻辑,可以在缩放完成后遍历所有单元格,将文本的垂直坐标重新设置为单元格的中点,抵消拉伸带来的位置偏移。
需要在原代码myTable.scale(1, 2)后添加如下代码:
# 遍历所有单元格修正文本垂直位置 for cell in myTable.get_celld().values(): # 获取单元格当前的上下边界 y_bottom = cell.get_y() y_top = y_bottom + cell.get_height() # 将文本y坐标设置为单元格垂直中点 cell.get_text().set_y((y_bottom + y_top) / 2)
注意:该方法在后续调整画布大小、修改缩放比例后,需要重新执行位置修正逻辑,稳定性弱于方法一。
内容的提问来源于stack exchange,提问作者cdahms
相关产品推荐
相关产品推荐

