#javascript
Вопрос:
Я впервые играю с Google Charts и пытаюсь выяснить, как сделать диапазон дат отзывчивым как с точки зрения размера экрана, так и с точки зрения доступного пространства для меток в зависимости от количества точек данных.
Мне удалось создать несколько примеров кода с разрывами строк в метках haxis, но метка, похоже, выровнена по центру — есть ли способ выровнять это по левому краю? (или уже есть встроенный способ реагирования на даты?)
var _count = 0;
var _months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
doTest();
function doTest() {
var dtT = '2010-01-01';
var data = document.getElementById('data');
data.innerHTML = '';
var a = 0;
var b = parseInt(document.getElementById('n').value);
_count = b;
var b0 = b;
for (var d = 0; d < b0; d ) {
var dt = new Date(dtT);
data.innerHTML = "['" getLabel(dt) "', " a "," b "],";
a ;
b--;
dt.setDate(dt.getDate() 1) // tomorrow
dtT = dt.getFullYear() '/' getNN(dt.getMonth() 1) '/' getNN(dt.getDate());
}
data.innerHTML = data.innerHTML.substr(0, data.innerHTML.length - 1);
google.charts.load('current', {
packages: ['corechart', 'bar']
});
google.charts.setOnLoadCallback(drawAxisTickColors);
}
// ------------------------------------------------------------------------
function getNN(n) {
if (n < 10) return '0' n;
return n;
}
// ------------------------------------------------------------------------
function getLabel(tx) {
var date = new Date(tx);
var d = date.getDate();
var m = date.getMonth() 1;
var y = date.getYear() - 100;
return d ' \n' _months[m - 1] ' ' y;
}
// ------------------------------------------------------------------------
function drawAxisTickColors() {
var ww = window.innerWidth;
var numOfdates = 35;
var tdString = document.getElementById('data').innerHTML;
var arr = eval("[" tdString "]");
var data = new google.visualization.DataTable();
data.addColumn('string', 'Dt');
data.addColumn('number', 'Open');
data.addColumn('number', 'Closed');
data.addRows(arr);
var options_stacked = {
isStacked: true,
height: 300,
hAxis: {
slantedText: false,
showTextEvery: 7
},
legend: {
position: 'top',
maxLines: 3
},
vAxis: {
minValue: 0
}
};
var chart = new google.visualization.ColumnChart(document.getElementById('chart_div'));
chart.draw(data, options_stacked);
}
window.addEventListener('resize', drawAxisTickColors);
<script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
<h1>Google Charts Test</h1>
Columns:<input id='n' type='number' value='66'>
<input type='button' onClick='doTest()' value='Go'>
<div id="chart_div"></div>
<table style='display:none'>
<tr><td id="data"></td></tr>
</table>
Для этого тоже есть JSFiddle, если вы хотите поиграть с ним — https://jsfiddle.net/Abeeee/d5fojtp2 /
Ответ №1:
Хорошо, похоже, что создание первого столбца в данных в виде строки было проблемой; изменение его на сегодняшний день (и настройка кода для создания тестовых данных в соответствии с ним), похоже, позволяет диаграмме автоматически обрабатывать интервалы и перекрытия (и сводит на нет проблему выравнивания меток). Обратите внимание, что я также добавляю элемент управления format (format: ‘d / MMM / yy’) в массив hAxis.
var data = new google.visualization.DataTable();
data.addColumn('date', 'Dt'); <---- was string
data.addColumn('number', 'Open');
data.addColumn('number', 'Closed');
data.addRows(arr);
См. https://jsfiddle.net/Abeeee/d5fojtp2/25 / для рабочего кода.
НО обратите внимание, что это по-прежнему приводит к сбою, когда у вас есть, скажем, 1 или 2 точки данных — ошибка в том, что даты под столбцами неверны.