You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用dtaidistance绘制DTW路径无输出,加plt.show仍无效,求原因

运行dtaidistance的DTW可视化代码无输出,添加plt.show()仍无效的原因?

我尝试运行dtaidistance官方文档中的DTW示例代码:

from dtaidistance import dtw
from dtaidistance import dtw_visualisation as dtwvis
import numpy as np
s1 = np.array([0., 0, 1, 2, 1, 0, 1, 0, 0, 2, 1, 0, 0])
s2 = np.array([0., 1, 2, 3, 1, 0, 0, 0, 2, 1, 0, 0, 0])
path = dtw.warping_path(s1, s2)
dtwvis.plot_warping(s1, s2, path, filename="warp.png")

预期生成DTW路径可视化图,但实际无绘图输出。我已导入matplotlib.pyplot并添加plt.show()语句,问题仍未解决,请问导致该情况的原因是什么?


可能的原因及解决办法

  • filename参数触发直接保存而非显示
    当指定filename="warp.png"时,dtwvis.plot_warping会直接将图像写入文件,不会在界面渲染。即使后续调用plt.show()也无效,因为函数内部保存后可能已关闭绘图对象。
    解决方法:先移除filename参数,让图像优先显示;如果需要同时保存和显示,可手动获取绘图对象后操作:

    from dtaidistance import dtw
    from dtaidistance import dtw_visualisation as dtwvis
    import numpy as np
    import matplotlib.pyplot as plt
    
    s1 = np.array([0., 0, 1, 2, 1, 0, 1, 0, 0, 2, 1, 0, 0])
    s2 = np.array([0., 1, 2, 3, 1, 0, 0, 0, 2, 1, 0, 0, 0])
    path = dtw.warping_path(s1, s2)
    # 获取绘图对象,先显示再保存
    fig, ax = dtwvis.plot_warping(s1, s2, path)
    plt.show()
    fig.savefig("warp.png")
    
  • matplotlib后端配置不支持显示
    在无GUI的服务器环境或部分终端中,matplotlib默认后端可能不支持交互式显示。可以手动指定支持显示的后端,在代码开头添加:

    import matplotlib
    matplotlib.use('TkAgg')  # 或'Qt5Agg'等适配当前系统的后端
    
  • dtaidistance版本存在行为差异
    不同版本的dtw_visualisation模块在绘图逻辑上可能有变化,尝试升级到最新版本:

    pip install --upgrade dtaidistance
    
  • 绘图对象被隐式关闭
    部分旧版本中,指定filename后函数会自动关闭figure对象,导致plt.show()找不到可渲染的图像。此时需避免在显示前指定filename,或手动创建figure并传递给绘图函数。

内容的提问来源于stack exchange,提问作者Skobo Do

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 13:20:29