如何获取camelot.plot图表区域内的鼠标XY坐标以提取PDF表格
解决Camelot图表区域内鼠标坐标获取问题
你需要获取Camelot.plot生成的图表区域内的PDF页面坐标(而非Matplotlib主窗口的全局坐标),以此生成camelot.read_pdf所需的table_areas和columns参数。当前代码获取的是主窗口坐标,需要通过坐标转换实现需求,修改后的代码如下:
import camelot import matplotlib.pyplot as plt def mouseMotion(event): # 检查鼠标是否在图表区域内 if event.inaxes is not None: # 将全局窗口坐标转换为图表数据坐标(对应PDF页面坐标) x, y = event.inaxes.transData.inverted().transform_point((event.x, event.y)) print('PDF页面坐标 X - Y:', round(x, 2), round(y, 2)) tables = camelot.read_pdf('mydatafile.pdf', pages='1', flavor='stream', edge_tool=1500) print("Total Tables Extracted: ", tables.n) # 保存每个表格对应的Axes对象,确保能正确识别图表区域 axes_list = [] for i in range(tables.n): ax = camelot.plot(tables[i], kind='text').ax axes_list.append(ax) plt.connect('motion_notify_event', mouseMotion) plt.show(block=True)
关键说明:
event.inaxes:判断鼠标当前是否处于Camelot生成的图表Axes区域内,避免输出无效坐标transData.inverted().transform_point():将Matplotlib主窗口的像素坐标,转换为图表对应的PDF页面数据坐标,这个坐标直接符合table_areas(格式如[x1,y1,x2,y2])和columns参数的要求- 保存
ax对象:确保跟踪每个表格对应的图表区域,避免坐标识别异常
内容的提问来源于stack exchange,提问作者Jecook
相关产品推荐
相关产品推荐

