自定义matplotlib样式文件导入报错求助:直接运行正常,导入模块时出错
问题原因与修复方案
问题原因
直接运行test.py时,Python的工作目录就是test.py所在的目录,此时mystyle.mplstyle是相对当前工作目录的路径,所以能正常找到。但当通过test2.py导入test模块时,Python的工作目录是你启动test2.py时所在的目录(而非test.py所在的目录),此时test.py里的相对路径会去当前工作目录查找样式文件,自然找不到同目录下的mystyle.mplstyle。
修复方法
方法1:使用模块所在目录的绝对路径(推荐)
修改test.py的代码,通过获取自身文件的绝对路径来拼接样式文件的路径,彻底摆脱工作目录的限制:
import matplotlib.pyplot as plt import os # 获取当前test.py文件所在的绝对目录 module_dir = os.path.dirname(os.path.abspath(__file__)) # 拼接样式文件的完整路径 style_file_path = os.path.join(module_dir, 'mystyle.mplstyle') plt.style.use(style_file_path)
方法2:将样式文件放入matplotlib默认样式库
把mystyle.mplstyle放到matplotlib的默认样式目录中,之后直接通过样式名调用即可:
- 运行以下代码找到matplotlib的配置目录:
import matplotlib print(matplotlib.get_configdir())
- 在该目录下找到
stylelib文件夹(没有就新建一个),将mystyle.mplstyle放进去。 - 修改
test.py中的调用代码为:
plt.style.use('mystyle') # 不需要加.mplstyle后缀
方法3:固定运行时的工作目录
运行test2.py前,先切换到test.py和test2.py所在的目录,再执行脚本。比如在命令行中:
cd /path/to/your/scripts python test2.py
这种方法依赖运行环境的操作,灵活性较差。
内容的提问来源于stack exchange,提问作者Leon
相关产品推荐
相关产品推荐

