Параметр «масштабы» ломает график Chart.js

Я пытаюсь включить линейную диаграмму для некоторых данных о запасах в свой проект django, используя Chart.js. Я могу нормально отображать простую диаграмму с нужными мне данными, но когда я пытаюсь отформатировать ось X для даты и времени, диаграмма больше не отображается. Вот рабочая версия файла (client_small_market_view.html):

{% load static %}

<script src = "https://cdn.jsdelivr.net/npm/[email protected]/dist/Chart.min.js"></script>
<div id = "container" class = "chartjs-wrapper">
    <canvas id = "stock-chart" class = "chartjs" style = "display: block;"></canvas>
</div>

<script>
    var dateFormat = 'YYYY-MM-DD';

    // the dates come ins as a list of strings formatted YYYY-MM-DD, so I use this function here to 
    // convert to Date
    function parseDate(date){
        var parts = date.split("-");
        return new Date(parts[0], parts[1] - 1, parts[2])
    };

    var config = {
        type: "line",
        data: {
            labels: {{ market_data.1|safe }}.map(dateString =>parseDate(dateString)),
            datasets: [
                {
                    label: "{{ market_data.0.0.0|safe }}",
                    data: {{ market_data.0.1.0|safe }},
                    fill: false,
                },
            ],
        },
        options:{
            title:{
                text: 'Market',
                display: true
            },
        }
    };

    var ctx = document.getElementById('stock-chart');
    var chart = new Chart(ctx, config);

</script>

И вот график, который он выдает на моем конце.

Параметр «масштабы» ломает график Chart.js

Однако добавление опции «масштабы» для форматирования меток оси x, как здесь

{% load static %}

<script src = "https://cdn.jsdelivr.net/npm/[email protected]/dist/Chart.min.js"></script>
<div id = "container" class = "chartjs-wrapper">
    <canvas id = "stock-chart" class = "chartjs" style = "display: block;"></canvas>
</div>

<script>
    var dateFormat = 'YYYY-MM-DD';

    function parseDate(date){
        var parts = date.split("-");
        return new Date(parts[0], parts[1] - 1, parts[2])
    };

    var config = {
        type: "line",
        data: {
            labels: {{ market_data.1|safe }}.map(dateString =>parseDate(dateString)),
            datasets: [
                {
                    label: "{{ market_data.0.0.0|safe }}",
                    data: {{ market_data.0.1.0|safe }},
                    fill: false,
                },
            ],
        },
        options: {
            title:{
                text: 'Market',
                display: true
            }
            // when I take 'scales' out the chart renders fine,
            // but I need it to format the x-axis dates
            scales: {
                xAxes: [{
                    type: 'time',
                    time: {
                        parser: 'YYYY-MM-DD',
                        unit: 'day',
                        displayFormats: {
                            'day': 'YYYY-MM-DD'
                        }
                    },
                    ticks: {
                        source: 'data'
                    }
                }]                    
            }
        }
    };

    var ctx = document.getElementById('stock-chart');
    var chart = new Chart(ctx, config);

</script>

оставляет меня с чистым холстом. Я потратил часы и часы, пытаясь понять, в чем проблема, но не могу понять. Для справки, этот HTML-документ включен в родительский документ, который служит домашней страницей для приложения:

{% include './client_navbar.html'%}
{% include './client_small_market_view.html' with market_data=market_data%}
{% include './client_portfolios_summary_view.html' with portfolioss=portfolios %}

Кроме того, я также использую Bootstrap 4.4.1, но не могу представить, что это причина проблемы. Любые советы будут очень признательны!

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
3
0
602
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Кажется, это работает для меня. Вы проверили в своем браузере, чтобы убедиться, что у вас не возникают какие-либо исключения JS, которые мешают отображению диаграммы?

В частности, я считаю, что вам нужно включить модуль момента (https://momentjs.com/), чтобы использовать

type: 'time'

Если модуль по какой-то причине не загружается, он может вызвать исключение и выдать вам пустую диаграмму.

Вот еще одна ссылка, описывающая аналогичную проблему: ChartJS не отображает данные о времени с использованием Moment.js

Успех!. Почему-то ни один из рассмотренных мной примеров не прояснил зависимость, или, что более вероятно, я ее проглядел. Ваше здоровье.

Benjamin Klybor 11.12.2020 03:18

Другие вопросы по теме