同一段Jupyter Notebook绘图代码在不同设备输出图像不一致如何排查
可能导致绘图结果不同的常见操作/环境原因
- 代码执行不完整:清除内核后没有按顺序执行完整代码,仅运行了部分绘图片段,导致
T、F、T_p、F_p等变量使用了缓存的旧值(若此前运行过其他相关代码),甚至出现变量未定义的隐含问题 - 代码内容被改动:复制代码时不小心修改了参数,比如
sigma常量的数值、np.arange的起止范围、行星温度的数值等 - 绘图后端配置不同:对方的Jupyter环境没有开启
%matplotlib inline内嵌绘图配置,弹出的独立绘图窗口的默认缩放比例、尺寸不同,会导致视觉上的图像差异 - Matplotlib全局配置差异:对方的Anaconda环境中修改过Matplotlib的默认配置(
rcParams),包括默认坐标轴范围、线条样式、配色、字体、分辨率等,会导致同一份绘图代码的视觉表现差异 - 画布未手动清空:如果对方在运行当前代码前,同个Notebook里运行过其他绘图代码且操作顺序错误,没有重启内核/清空画布,旧画布残留会导致在原有绘图基础上叠加当前代码的图像
- 依赖包版本差异:双方环境中
numpy或matplotlib的大版本不同,部分API默认行为存在差异,比如np.arange的步长默认逻辑、Matplotlib的绘图渲染逻辑变化
排查方法
先对比双方运行代码后打印的F_p数值,如果数值不一致,说明是代码执行或参数定义环节出问题;如果数值一致,就属于Matplotlib渲染配置的差异,可在代码开头添加plt.figure()新建空白画布,在代码末尾加plt.xlim(50,800)、plt.ylim(0, max(F)*1.1)手动固定坐标轴范围,消除全局配置带来的影响。
内容的提问来源于stack exchange,提问作者julez
相关产品推荐
相关产品推荐

