当前位置: 首页 > 知识库问答 >
问题:

Chart.js-多个折线图-仅显示最后一个图表

井嘉胜
2023-03-14

我正在使用chart.js在一个页面上显示多个折线图。然而,只有最后一张图表显示,尽管我称之为“canvas1”和“canvas2”。有些地方一定有冲突,我试过很多东西,但没有任何乐趣。以下是两个图表,仅显示最后一个:

图一

<script type="text/javascript">

    var lineChartData = {
        labels : ["January","February","March","April","May","June","July","August","September","October","November","December"],
        datasets : [
            {
                label: "Target",
                fillColor : "rgba(220,220,220,0.2)",
                strokeColor : "rgba(220,220,220,1)",
                pointColor : "rgba(220,220,220,1)",
                pointStrokeColor : "#fff",
                pointHighlightFill : "#fff",
                pointHighlightStroke : "rgba(220,220,220,1)",
                data : [160000,175000,185000,180000,185000,185000,185000,195000,200000,0,0]
            },
            {
                label: "Sales",
                fillColor : "rgba(151,187,205,0.2)",
                strokeColor : "rgba(151,187,205,1)",
                pointColor : "rgba(151,187,205,1)",
                pointStrokeColor : "#fff",
                pointHighlightFill : "#fff",
                pointHighlightStroke : "rgba(151,187,205,1)",
                data : [<?php echo $stockJanuary ?>,<?php echo $stockFebruary ?>,<?php echo $stockMarch ?>,<?php echo $stockApril ?>,<?php echo $stockMay ?>,<?php echo $stockJune ?>,<?php echo $stockJuly ?>,<?php echo $stockAugust ?>,<?php echo $stockSeptember ?>,<?php echo $stockOctober ?>,<?php echo $stockNovember ?>,<?php echo $stockDecember ?>]
            }
        ]

    }
            window.onload = function(){
    var ctx = document.getElementById("canvas1").getContext("2d");
    window.myLine = new Chart(ctx).Line(lineChartData, {
        responsive: true
    });
}
</script>

图二:

<script type="text/javascript">

    var lineChartData = {
        labels : ["January","February","March","April","May","June","July","August","September","October","November","December"],
        datasets : [
            {
                label: "Target",
                fillColor : "rgba(220,220,220,0.2)",
                strokeColor : "rgba(220,220,220,1)",
                pointColor : "rgba(220,220,220,1)",
                pointStrokeColor : "#fff",
                pointHighlightFill : "#fff",
                pointHighlightStroke : "rgba(220,220,220,1)",
                data : [19000,21000,23000,25000,27000,29000,31000,32000,33000,0,0]
            },
            {
                label: "Sales",
                fillColor : "rgba(151,187,205,0.2)",
                strokeColor : "rgba(151,187,205,1)",
                pointColor : "rgba(151,187,205,1)",
                pointStrokeColor : "#fff",
                pointHighlightFill : "#fff",
                pointHighlightStroke : "rgba(151,187,205,1)",
                data : [<?php echo $northJanuary ?>,<?php echo $northFebruary ?>,<?php echo $northMarch ?>,<?php echo $northApril ?>,<?php echo $northMay ?>,<?php echo $northJune ?>,<?php echo $northJuly ?>,<?php echo $northAugust ?>,<?php echo $northSeptember ?>,<?php echo $northOctober ?>,<?php echo $northNovember ?>,<?php echo $northDecember ?>]
            }
        ]

    }

    window.onload = function(){
    var ctx = document.getElementById("canvas2").getContext("2d");
    window.myLine = new Chart(ctx).Line(lineChartData, {
    responsive: true
    });



}

</script>

你的帮助将不胜感激,已经打扰我一段时间了!

提前谢谢

共有3个答案

卢普松
2023-03-14

初始代码中的错误是多次调用函数window.onload。

不幸的是,事情并没有那么简单。执行第二个onload事件处理程序时,将替换第一个onload事件处理程序。[直到最后一个onload.window为止]

这个问题通常出现在当你想单独创建图形,例如,在你的页面图形中包含PHP时(因为在每个PHP页面中你都在调用window.onload)

简易解决方案:

function start() {
  func1();
  func2();
}
window.onload = start;

西蒙·威利森提议:

function addLoadEvent(func) {
  var oldonload = window.onload;
  if (typeof window.onload != 'function') {
    window.onload = func;
  } else {
    window.onload = function() {
      if (oldonload) {
        oldonload();
      }
      func();
    }
  }
}
addLoadEvent(nameOfSomeFunctionToRunOnPageLoad);
addLoadEvent(function() {
  /* more code to run on page load */
});
苍志文
2023-03-14

起初,我遇到了与原始问题完全相同的问题,并尝试了Arpan Das建议,但第一次尝试时没有正确。

任何有同样问题的人,可能会发现在一个页面上查看多个图形的工作示例是有用的:

<div id="canvas-holder">
<canvas id="A" width="300" height="300"/><br>
</div>

<div id="canvas-holder">
<canvas id="B" width="300" height="300"/><br>
</div>

<script>
    var pieDataA = [ { value: 50, color: "#F6BFBD" } ];
    var pieDataB = [ { value: 50, color: "#00BFBD" } ];
    window.onload = function(){
    var ctx1 = document.getElementById("A").getContext("2d");
    window.myPieA = new Chart(ctx1).Pie(pieDataA); 

    var ctx2 = document.getElementById("B").getContext("2d");
    window.myPieB = new Chart(ctx2).Pie(pieDataB); };
</script>

小提琴链接:http://fiddle.jshell.net/2omjx9dn/

毛胜
2023-03-14

尝试对两个ctx变量使用不同的名称。

window.onload = function(){
    var ctx = document.getElementById("canvas2").getContext("2d");
    window.myLine = new Chart(ctx).Line(lineChartData, {
        responsive: true
    });


    var ctx2 = document.getElementById("canvas1").getContext("2d");
    window.myLine = new Chart(ctx2).Line(lineChartData2, {
        responsive: true
    });   
}
 类似资料:
  • 我正在启动新的Angular应用程序,我用Angulal-CLI(beta 22.1)初始化了它。但是当我在图表中添加测试数据(5个值)时,它似乎缩放错误,只显示了前两个值,并在图表的整个长度上拉伸它们(见图)。 该项目是空白的,不包含任何CSS。 我的: chart.js库是通过添加的: 我真的不知道我错在哪里。我尝试了许多不同的选项(,,包装

  • 我正在尝试使用图表创建多行图表。js 我可以使用固定的数据结构对1行和2行执行此操作,但我无法使用多行来显示传递给数据结构的数据。 下面是从图表中缩写出来的示例用法。js网站 http://www.chartjs.org/docs/#getting-started 现在我的代码, 图表始终显示相同的最后生成的行4次。 我是javascript新手,我确信我在创建对象结构时犯了一些错误,我花了一天的

  • 可能吗?怎样 我曾尝试在多个图表、一个图例、多个图表Chart js等上切换Chart.js sync legend。但是,这些解决方案有一个带有图例的图表,并且该图例会影响其他图表。 我应该隐藏图表并只显示图例吗?我应该画一张没有数据的图表吗? 如果你能告诉我,我就毕业了 HTML JS

  • 我正在尝试使用Chart.js来显示血压的数据,其中包括三组数据(脉搏、收缩、舒张)。脉搏数据应显示为折线图,而收缩期和舒张期将显示为条形图。所以我想应该有办法把它们结合在一起。 ps.更新的图表js提供了堆叠的条形图,作为定制图表js的开始,这是相当好的学习。

  • 我正在PyGame中制作一个太空入侵者游戏,但当我尝试绘制投射物时,它会覆盖/更改主精灵(平面)。如何解决此问题,以便在屏幕上显示多个精灵?

  • 本文向大家介绍具有多个系列(线)的JavaFX折线图示例,包括了具有多个系列(线)的JavaFX折线图示例的使用技巧和注意事项,需要的朋友参考一下 内联图,数据值表示由一条线连接的一系列点。在JavaFX中,可以通过实例化javafx.scene.chart.LineChart类来创建折线图。 在实例化此类时,必须传递Axis类的两个对象,它们代表x轴和y轴(作为构造函数的参数)。由于Axis类是