如何在Jupyter Notebook中调用Python脚本的公共函数并查看可视化输出
在Jupyter Notebook中导入并调用指定Python函数(含可视化输出)
一、准备脚本文件
把merge_boxes_horizontally函数,以及它依赖的has_sufficient_y_overlap、in_x_proximity函数,还有TextBox、TextBoxCluster类,全部放到同一个Python脚本文件中(比如命名为box_processing.py),并将该脚本保存到和你的Jupyter Notebook文件同一目录下。
二、在Notebook中导入函数
有两种导入方式,根据需求选择:
方式1:导入整个模块
import box_processing
调用函数时通过模块名访问:
result_clusters = box_processing.merge_boxes_horizontally(your_boxes_data)
方式2:直接导入目标函数
from box_processing import merge_boxes_horizontally
调用时直接用函数名:
result_clusters = merge_boxes_horizontally(your_boxes_data)
脚本不在同目录的处理
如果脚本和Notebook不在同一文件夹,先把脚本路径添加到Python搜索路径:
import sys sys.path.append("/你/的/脚本/所在/绝对路径") # 之后再执行上面的导入语句
三、准备输入数据
你需要先构造TextBox类型的实例列表作为函数输入,示例如下:
# 先定义TextBox类(如果脚本里没包含的话) class TextBox: def __init__(self, left, top, right, bottom): self.left = left self.top = top self.right = right self.bottom = bottom # 构造示例文本框数据 sample_boxes = [ TextBox(10, 20, 50, 40), TextBox(60, 22, 100, 38), TextBox(10, 50, 50, 70), TextBox(110, 21, 150, 39) ]
四、调用函数并实现可视化
调用函数得到聚类结果后,用matplotlib绘制可视化效果:
import matplotlib.pyplot as plt # 调用目标函数 clusters = merge_boxes_horizontally(sample_boxes) # 绘制可视化图 plt.figure(figsize=(10, 6)) # 绘制原始文本框(蓝色细边框) for box in sample_boxes: plt.gca().add_patch( plt.Rectangle( (box.left, box.top), box.right - box.left, box.bottom - box.top, fill=False, color='blue', linewidth=1 ) ) # 绘制合并后的聚类框(红色粗边框) for cluster in clusters: # 计算聚类框的边界(假设cluster包含boxes属性存储子文本框) cluster_left = min(b.left for b in cluster.boxes) cluster_top = min(b.top for b in cluster.boxes) cluster_right = max(b.right for b in cluster.boxes) cluster_bottom = max(b.bottom for b in cluster.boxes) plt.gca().add_patch( plt.Rectangle( (cluster_left, cluster_top), cluster_right - cluster_left, cluster_bottom - cluster_top, fill=False, color='red', linewidth=2 ) ) # 调整图表显示 plt.xlabel('X坐标') plt.ylabel('Y坐标') plt.title('文本框水平合并结果') plt.gca().invert_yaxis() # 适配文本布局的Y轴方向(从上到下) plt.show()
五、注意事项
- 必须确保脚本中包含函数依赖的所有组件(辅助函数、类),否则会出现导入或调用错误。
- 如果修改了脚本内容,需要重启Jupyter内核,或者用以下代码重新加载模块:
import importlib importlib.reload(box_processing)
内容的提问来源于stack exchange,提问作者aarya
相关产品推荐
相关产品推荐

