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

无法从chart.js在同一页上呈现两个图表

禹德水
2023-03-14

在过去的一个小时里,我一直在尝试让Chart.js在同一页上呈现两个折线图。我已经确保我的画布元素ID是唯一的,我的变量也是唯一的。

这是在使用chart.js v2.8.0

下面是inspect元素的错误日志。

index.html中定义的输入数据

var lineChartData = {
        labels: ['-18:00', '-15:00', '-12:00', '-9:00', '-6:00', '-3:00', '0:00'],
        datasets: [{
            label: 'Temperature (F)',
            borderColor: window.chartColors.red,
            backgroundColor: window.chartColors.red,
            fill: false,
            data: [
                60 - randomScalingFactor(),
                55 - randomScalingFactor(),
                57 - randomScalingFactor(),
                58 - randomScalingFactor(),
                59 - randomScalingFactor(),
                65 - randomScalingFactor(),
                73 - randomScalingFactor()
            ],
            yAxisID: 'y-axis-1',
        }]
    };

    var avgLineChartData = {
        labels: ['1', '1', '1', '1', '1', '1', '1'],
        datasets: [{
            label: 'Avg Temperature (F)',
            borderColor: window.chartColors.green,
            backgroundColor: window.chartColors.green,
            fill: false,
            data: [
                65 - randomScalingFactor(),
                53 - randomScalingFactor(),
                58 - randomScalingFactor(),
                54 - randomScalingFactor(),
                62 - randomScalingFactor(),
                65 - randomScalingFactor(),
                74 - randomScalingFactor()
            ],
            yAxisID: 'y-axis-1',
        }]
    };

图表绘制index.html

window.onload = function () {
        var ctx = document.getElementById('canvas').getContext('2d');
        new Chart(ctx, {
            type: 'line',
            data: lineChartData,
            options: {
                responsive: true,
                hoverMode: 'index',
                stacked: false,
                title: {
                    display: true,
                    text: 'Temp(F)/Humidity(%) per 15 Hours'
                },
                scales: {
                    yAxes: [{
                        type: 'linear', // only linear but allow scale type registration. This allows extensions to exist solely for log scale for instance
                        display: true,
                        position: 'left',
                        id: 'y-axis-1',
                        ticks: {
                            beginAtZero: true,
                            max: 100,
                        },
                    }, {
                        type: 'linear', // only linear but allow scale type registration. This allows extensions to exist solely for log scale for instance
                        display: true,
                        position: 'right',
                        id: 'y-axis-2',
                        ticks: {
                            beginAtZero: true,
                            max: 100,
                        },
                        // grid line settings
                        gridLines: {
                            drawOnChartArea: false, // only want the grid lines for one axis to show up
                        },
                    }],
                },
                elements: {
                    line: {
                        tension: 0.3
                    }
                }
            }
        });

        var ctx2 = document.getElementById('canvas2').getContext('2d');
        new Chart(ctx2, {
            type: 'line',
            data: avgLineChartData,
            options: {
                responsive: true,
                hoverMode: 'index',
                stacked: false,
                title: {
                    display: true,
                    text: 'Avg Temp(F)/Humidity(%) per 7 Days'
                },
                scales: {
                    yAxes: [{
                        type: 'linear', // only linear but allow scale type registration. This allows extensions to exist solely for log scale for instance
                        display: true,
                        position: 'left',
                        id: 'avg-y-axis-1',
                        ticks: {
                            beginAtZero: true,
                            max: 100,
                        },
                    }, {
                        type: 'linear', // only linear but allow scale type registration. This allows extensions to exist solely for log scale for instance
                        display: true,
                        position: 'right',
                        id: 'avg-y-axis-2',
                        ticks: {
                            beginAtZero: true,
                            max: 100,
                        },
                        // grid line settings
                        gridLines: {
                            drawOnChartArea: false, // only want the grid lines for one axis to show up
                        },
                    }],
                },
                elements: {
                    line: {
                        tension: 0.3
                    }
                }
            }
        });
    };

index.html中定义的Canvas元素

<div class="container">
     <canvas id="canvas"></canvas>
     <canvas id="canvas2"></canvas>
</div>

共有1个答案

湛宝
2023-03-14

在您的数据中,

var avgLineChartData = {
        labels: ['1', '1', '1', '1', '1', '1', '1'],
        datasets: [{
            label: 'Avg Temperature (F)',
            borderColor: window.chartColors.green,
            backgroundColor: window.chartColors.green,
            fill: false,
            data: [
                65 - randomScalingFactor(),
                53 - randomScalingFactor(),
                58 - randomScalingFactor(),
                54 - randomScalingFactor(),
                62 - randomScalingFactor(),
                65 - randomScalingFactor(),
                74 - randomScalingFactor()
            ],
            yAxisID: 'y-axis-1',
        }]
    };

您可以设置yAxisId:'y轴-1'。但是当你绘制图表时,它们是id:'avg-y-axis-1'

 类似资料:
  • 我正在尝试使用Chart.js在一个页面上创建多个图表。我正在动态创建几个画布来承载这些图表。 每个图表的相关信息都包含在JSON对象中,JSON对象包含在“allDatas”中。 请注意,allDatas中的数据格式正确,并且每个数据都经过测试,我们可以正确创建图表,而不会出现任何问题。画布也是一样,它们都是正确的,我们可以在其中任何一个中显示图表。当我尝试创建多个图表时,会出现问题。 以下是我

  • 问题内容: 我正在使用基于Chart.js的AngularJS模块来显示图形。它的工作原理像一个超级按钮,但是当我在AngularJS选项卡集中显示图表时,如果它不是第一个选项卡,则该图形不会呈现。 这是JSFiddle。有人设法解决这个问题吗? 谢谢 问题答案: 正如@Martin指出的,这是Chart.js的问题,当在隐藏的DOM元素中初始化时,图表未显示(即使显示隐藏的元素,其高度和宽度也保

  • 我正在构建一个文本语音应用程序。我正在使用splitpane来显示它。左窗格显示动态变化的语音到文本信息。右窗格显示一个“是/否”固定文本为每个句子说在左窗格在同一级别。 为了确保“Yes/No”显示在与左窗格中的句子完全相同的级别上,每当说出新句子时,我将在左窗格和右窗格中添加文本到相应的HBox(Splitpane_left_hbox(语音到文本句子)和Splitpane_right_hbox

  • 问题内容: 我的网页上有一个Google地图,上面有一个我自己建立的搜索窗格,可以随意显示和隐藏。它的覆盖范围可以说是说一面地图的200像素。问题是,当我调整地图大小时,或窗格重叠的区域未渲染,即由于某种原因地图未渲染。 在Box中,输入OMDB(这是机场的ICAO代码),然后按Enter。 结果显示出来,您会看到窗格。现在单击全屏链接,然后单击“机场”选项卡以使面板消失- 您现在看到地图的一部分

  • 问题内容: 我有一个动态网页,该网页应处理两种形式:登录表单和注册表单。我正在使用WTForms处理这两种形式,但是由于将两种形式都呈现到同一页面上,因此使它无法正常工作。 以下是我的网页登录表单的代码: PYTHON: HTML: 以下是我的网页注册表格的代码: PYTHON: HTML: 继续加载网页时出现以下错误: 据我了解,表单之间存在冲突,因为根据追溯: 返回以下错误: 当脚本看到: 但

  • 问题内容: 我想将注册和登录表格都放在同一页面上。 它们都以: 所以,我需要这样的东西: 还有如何在第二个表格繁忙时防止执行第一个表格,反之亦然(用户单击两者) 我的想法是在启动流程时(例如,在流程结束时)创建一个简单变量,因此: 可能有更好的方法。 问题答案: 您可以通过两种不同的动作制作两种形式 还是这样做 然后,您的PHP文件将用作一个switch($ _ POST [‘action’])…