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

Plotly.js静态简单图表不显示,复杂动态图表正常的问题求助

解决Plotly.js静态图表不显示的问题

嘿,这个问题其实挺常见的,我一眼就揪出了关键细节——你的静态图表脚本写在目标div之前了!

当浏览器从上到下解析页面时,执行到Plotly.newPlot('test_div', data, layout);这行代码的时候,<div id="test_div">还没被渲染到DOM里,Plotly找不到要挂载图表的元素,自然没法生成图表。而你的动态图表是通过$.get异步请求加载的,等请求完成回调执行时,整个页面已经渲染完毕,chartTemp_div早就存在了,所以能正常显示。

修复方案有两种,选哪种都可以:

方案1:把静态图表脚本移到div之后

这是最简单的方法,确保目标DOM元素已经存在再执行Plotly代码:

<div id="test_div">HERE<br></div>
<script>
  var trace1 = {
    x:['2020-10-04', '2021-11-04', '2023-12-04'],
    y: [90, 40, 60],
    type: 'scatter'
  };
  var data = [trace1];
  var layout = {
    height: 400,
    width: 800,
    showlegend: false
  };
  Plotly.newPlot('test_div', data, layout);
</script>

方案2:用DOM就绪事件包裹代码

如果不想调整脚本位置,可以把代码放在DOM加载完成的回调里,确保所有元素都渲染后再执行:

<script>
  // 原生JS写法
  document.addEventListener('DOMContentLoaded', function() {
    var trace1 = {
      x:['2020-10-04', '2021-11-04', '2023-12-04'],
      y: [90, 40, 60],
      type: 'scatter'
    };
    var data = [trace1];
    var layout = {
      height: 400,
      width: 800,
      showlegend: false
    };
    Plotly.newPlot('test_div', data, layout);
  });
</script>
<div id="test_div">HERE<br></div>

要是你已经在使用jQuery,也可以用$(document).ready()代替DOMContentLoaded,效果完全一致。

以后写操作DOM的脚本时,记住这个小细节就不会再踩类似的坑啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:42:09