#javascript #jquery #charts #amcharts
#javascript #jquery #Диаграммы #amcharts
Вопрос:
Я пытаюсь построить диаграмму Ганта с датой / временем по оси X, код, который у меня есть, выглядит примерно так:
AmCharts.useUTC = true;
var chart = AmCharts.makeChart( "user-pages", {
"type": "gantt",
"theme": "light",
"marginRight": 70,
"dataDateFormat": "DD-MM-YYYY HH:NN",
"columnWidth": 0.5,
"valueAxis": {
"type": "date"
},
"brightnessStep": 7,
"graph": {
"fillAlphas": 1,
"lineAlpha": 1,
"lineColor": "#fff",
"balloonText": "<b>[[task]]</b>:<br />[[open]] -- [[value]]"
},
"rotate": true,
"categoryField": "category",
"segmentsField": "segments",
"colorField": "color",
"startDateField": "start",
"endDateField": "end",
"dataProvider": [ {
"category": "Module #1",
"segments": [ {
"start": AmCharts.stringToDate("2016-10-03T09:33:00 00:00", "DD-MM-YYYY HH:NN"),
"end": AmCharts.stringToDate("2016-10-04T10:33:00 00:00", "DD-MM-YYYY HH:NN"),
"color": "#b9783f",
"task": "Gathering requirements"
}]
}, {
"category": "Module #2",
"segments": [ {
"start": AmCharts.stringToDate("2016-10-03T07:00:00 00:00", "DD-MM-YYYY HH:NN"),
"end": AmCharts.stringToDate("2016-10-03T08:00:00 00:00", "DD-MM-YYYY HH:NN"),
"color": "#b9783f",
"task": "Gathering requirements"
}, {
"start": AmCharts.stringToDate("2016-10-03T13:00:00 00:00", "DD-MM-YYYY HH:NN"),
"end": AmCharts.stringToDate("2016-10-03T14:00:00 00:00", "DD-MM-YYYY HH:NN"),
"task": "Producing specifications"
}, {
"start": AmCharts.stringToDate("2016-10-03T15:00:00 00:00", "DD-MM-YYYY HH:NN"),
"end": AmCharts.stringToDate("2016-10-03T16:00:00 00:00", "DD-MM-YYYY HH:NN"),
"task": "Development"
} ]
}, {
"category": "Module #3",
"segments": [ {
"start": AmCharts.stringToDate("2016-10-03T09:33:00 00:00", "DD-MM-YYYY HH:NN"),
"end": AmCharts.stringToDate("2016-10-03T10:33:00 00:00", "DD-MM-YYYY HH:NN"),
"color": "#b9783f",
"task": "Gathering requirements"
}, {
"start": AmCharts.stringToDate("2016-10-03T11:33:00 00:00", "DD-MM-YYYY HH:NN"),
"end": AmCharts.stringToDate("2016-10-03T12:33:00 00:00", "DD-MM-YYYY HH:NN"),
"task": "Producing specifications"
}, {
"start": AmCharts.stringToDate("2016-10-03T15:33:00 00:00", "DD-MM-YYYY HH:NN"),
"end": AmCharts.stringToDate("2016-10-03T17:33:00 00:00", "DD-MM-YYYY HH:NN"),
"task": "Development"
} ]
}, {
"category": "Module #4",
"segments": [ {
"start": AmCharts.stringToDate("2016-10-03T07:00:00 00:00", "DD-MM-YYYY HH:NN"),
"end": AmCharts.stringToDate("2016-10-03T08:00:00 00:00", "DD-MM-YYYY HH:NN"),
"color": "#b9783f",
"task": "Gathering requirements"
}, {
"start": AmCharts.stringToDate("2016-10-03T13:00:00 00:00", "DD-MM-YYYY HH:NN"),
"end": AmCharts.stringToDate("2016-10-03T14:00:00 00:00", "DD-MM-YYYY HH:NN"),
"task": "Producing specifications"
}, {
"start": AmCharts.stringToDate("2016-10-03T15:00:00 00:00", "DD-MM-YYYY HH:NN"),
"end": AmCharts.stringToDate("2016-10-03T16:00:00 00:00", "DD-MM-YYYY HH:NN"),
"task": "Development"
} ]
}, {
"category": "Module #5",
"segments": [ {
"start": AmCharts.stringToDate("2016-10-03T09:33:00 00:00", "DD-MM-YYYY HH:NN"),
"end": AmCharts.stringToDate("2016-10-03T10:33:00 00:00", "DD-MM-YYYY HH:NN"),
"color": "#b9783f",
"task": "Gathering requirements"
}, {
"start": AmCharts.stringToDate("2016-10-03T11:33:00 00:00", "DD-MM-YYYY HH:NN"),
"end": AmCharts.stringToDate("2016-10-03T12:33:00 00:00", "DD-MM-YYYY HH:NN"),
"task": "Producing specifications"
}, {
"start": AmCharts.stringToDate("2016-10-03T15:33:00 00:00", "DD-MM-YYYY HH:NN"),
"end": AmCharts.stringToDate("2016-10-03T17:33:00 00:00", "DD-MM-YYYY HH:NN"),
"task": "Development"
} ]
} ],
"valueScrollbar": {
"autoGridCount": true
},
"chartCursor": {
"cursorColor": "#55bb76",
"valueBalloonsEnabled": false,
"cursorAlpha": 0,
"valueLineAlpha": 0.5,
"valueLineBalloonEnabled": true,
"valueLineEnabled": true,
"zoomable": false,
"valueZoomable": true
},
"export": {
"enabled": true
}
} );
Вы можете увидеть проблему здесь:
http://jsfiddle.net/28305m8g/1 /
Если я изменю сегмент первого на ту же дату:
[ {
"category": "Module #1",
"segments": [ {
"start": AmCharts.stringToDate("2016-10-03T09:33:00 00:00", "DD-MM-YYYY HH:NN"),
"end": AmCharts.stringToDate("2016-10-04T10:33:00 00:00", "DD-MM-YYYY HH:NN"),
"color": "#b9783f",
"task": "Gathering requirements"
}]
Для:
[ {
"category": "Module #1",
"segments": [ {
"start": AmCharts.stringToDate("2016-10-03T09:33:00 00:00", "DD-MM-YYYY HH:NN"),
"end": AmCharts.stringToDate("2016-10-03T10:33:00 00:00", "DD-MM-YYYY HH:NN"),
"color": "#b9783f",
"task": "Gathering requirements"
}]
Вы можете увидеть, как это работает ниже:
http://jsfiddle.net/28305m8g/2 /
Кто-нибудь знает, почему это происходит, и может помочь мне это исправить?
Ответ №1:
Вы вызываете AmCharts.stringToDate
неправильно. Второй параметр — это формат строковой даты, которую функция пытается проанализировать в первом параметре. Ваши даты указаны в формате ГГГГ-ММ-ДД, а не ДД-ММ-ГГГГ. Как только вы исправите формат, диаграмма будет отображаться правильно. Пример: AmCharts.stringToDate("2016-10-03T09:33:00 00:00", "YYYY-MM-DD HH:NN")
Вот ваша обновленная скрипка: http://jsfiddle.net/28305m8g/3 /
Комментарии:
1. Большое спасибо xorspark, что решение сработало, у меня к вам быстрый вопрос, моя диаграмма при наведении на нее теперь выдает следующую ошибку в консоли:
Uncaught TypeError: g.fixPrevious is not a functionshowGraphBalloon @ amcharts.js:211handleRollOver @ amcharts.js:204(anonymous function) @ amcharts.js:203 browser_adapter.js:93 EXCEPTION: TypeError: g.fixPrevious is not a function
Вы знаете, что вызывает это?2. Не могу сказать наверняка без скрипки, которая ее воспроизводит. Единственный раз, когда я видел подобную проблему, возникающую, — это если вы одновременно включаете js-файлы amcharts и ammap. Если у вас есть и диаграммы, и карты на одной странице, вы должны использовать ammap_amcharts_extension.js вместо того , чтобы ammap.js
3. Я использую оба ammap.js и amcharts на той же странице, да, но как только я использую ammap_amcharts_extensions.js вместо того , чтобы ammap.js Затем я сталкиваюсь со следующей ошибкой:
amcharts.js:3 Uncaught TypeError: Cannot read property 'length' of undefined a.inherits.b.fire @ amcharts.js:3 handleReleaseOutside @ ammap_amcharts_extension.js:19 d.handleMouseUp @ amcharts.js:6
4. Исправлено, это было связано с моим вызовом export.min.js после ammap_amcharts_extension.js как только я изменил его, чтобы импортировать перед ним, он начал работать. Еще раз спасибо!