导入自定义py模块绘图函数报plt未定义NameError的解决方法
问题描述
在Notebook中编写了若干用于简化编码(主要覆盖绘图场景)的自定义函数,将对应.py文件导入其他Notebook使用时,遇到自定义函数调用报错。
- 首先创建了名为
plots_custom_functions.py的文件,初始版本文件内仅定义了绘图标签设置函数,未导入依赖:
def get_label(TITLE, X, Y): ''' this function appends the labels to a plot. Arguments in the following order: Title, x label, y label ''' plt.title(TITLE) plt.xlabel(X) plt.ylabel(Y) plt.show
- 新建另一个Notebook后,写入如下导入语句:
import seaborn as sns import matplotlib.pyplot as plt import plots_custom_functions
- 编写绘图代码尝试调用自定义函数:
sns.histplot(data=my_data, x='my_x') get_label('MY_TITLE', 'MY_X)', 'MY_Y' )
运行后触发报错:
NameError: name 'plt' is not defined
先后尝试在plots_custom_functions.py的文件头部、get_label()函数内部添加import matplotlib.pyplot as plt语句,仍然出现相同报错,无法定位问题根源。
解决方案
报错的核心原因有两点:一是自定义模块文件初始未声明自身依赖的matplotlib库,二是使用import 模块名的方式导入后,直接写函数名调用相当于在当前Notebook的全局作用域查找函数,没有正确从导入的模块中引用目标函数。
按如下步骤调整即可正常运行:
- 第一步:修正
plots_custom_functions.py,在文件头部添加依赖导入语句,修正后完整文件内容:
import matplotlib.pyplot as plt def get_label(TITLE, X, Y): ''' this function appends the labels to a plot. Arguments in the following order: Title, x label, y label ''' plt.title(TITLE) plt.xlabel(X) plt.ylabel(Y) plt.show
- 第二步:调整Notebook中的导入语句,两种写法选一种即可:
- 按需导入单个目标函数,导入后可直接调用函数:
from plots_custom_functions import get_label - 一次性导入该文件内所有自定义函数,无需逐个声明函数名,便捷性更高:
from plots_custom_functions import *
- 按需导入单个目标函数,导入后可直接调用函数:
注意:不建议在单个.py文件中定义过多自定义函数,否则使用通配符导入时容易出现变量/函数命名冲突问题。
内容的提问来源于stack exchange,提问作者Federico Trotta
相关产品推荐
相关产品推荐

