на самом деле, вы можете просто использовать BarChart
,
и изменить тип серии для последних двух столбцов ...
series: {
1: {
type: 'line'
},
2: {
type: 'scatter'
}
}
см. Следующий рабочий фрагмент ...
google.charts.load('current', {
packages: ['corechart']
}).then(function () {
var dataTable = new google.visualization.DataTable();
dataTable.addColumn({type: 'string', id: 'x'});
dataTable.addColumn({type: 'number', id: 'bar'});
dataTable.addColumn({type: 'string', role: 'annotation'});
dataTable.addColumn({type: 'number', id: 'line'});
dataTable.addColumn({type: 'number', id: 'scatter'});
dataTable.addColumn({type: 'string', role: 'style'});
dataTable.addRows([
['', 300, '300', 300, 800, '#4caf50'],
['', 600, '600', 600, 800, '#f44336'],
['', 200, '200', 200, 800, '#4caf50'],
['', 150, '150', 150, 800, '#f44336'],
]);
var options = {
annotations: {
alwaysOutside: true,
textStyle: {
color: '#000000'
}
},
colors: ['#9e9e9e', '#2196f3'],
legend: 'none',
hAxis: {
gridlines: {
count: 0
},
textPosition: 'none'
},
series: {
1: {
lineWidth: 4,
type: 'line'
},
2: {
type: 'scatter'
}
}
};
var chart = new google.visualization.BarChart(document.getElementById('chart'));
chart.draw(dataTable, options);
});
<script src="https://www.gstatic.com/charts/loader.js"></script>
<div id="chart"></div>
РЕДАКТИРОВАТЬ
для добавления пользовательских меток рядом с точками рассеяния,
вы можете использовать метод диаграммы - -> getChartLayoutInterface()
, у которого есть метод для -> getBoundingBox(id)
, который можно использовать для поиска позиции элемента диаграммы.
где id
- идентификатор строки точка, в этом формате -> point#series#row
- point#0#0
на событии 'ready'
графика, мы можем расположить пользовательские метки рядом с точками.
google.visualization.events.addListener(chart, 'ready', function (sender) {
var padding = 16;
var chartLayout = chart.getChartLayoutInterface();
var containerBounds = chart.getContainer().getBoundingClientRect();
for (var row = 0; row < dataTable.getNumberOfRows(); row++) {
var pointBounds = chartLayout.getBoundingBox('point#2#' + row);
var dataLabel = document.createElement('span');
dataLabel.className = 'data-label';
dataLabel.innerHTML = 'Label ' + row;
dataLabel.style.top = (containerBounds.top + pointBounds.top - (pointBounds.height / 2)) + 'px';
dataLabel.style.left = (containerBounds.left + pointBounds.left + pointBounds.width + padding) + 'px';
chart.getContainer().appendChild(dataLabel);
}
});
см. Следующий рабочий фрагмент ...
google.charts.load('current', {
packages: ['corechart']
}).then(function () {
var dataTable = new google.visualization.DataTable();
dataTable.addColumn({type: 'string', id: 'x'});
dataTable.addColumn({type: 'number', id: 'bar'});
dataTable.addColumn({type: 'string', role: 'annotation'});
dataTable.addColumn({type: 'number', id: 'line'});
dataTable.addColumn({type: 'number', id: 'scatter'});
dataTable.addColumn({type: 'string', role: 'style'});
dataTable.addRows([
['', 300, '300', 300, 800, '#4caf50'],
['', 600, '600', 600, 800, '#f44336'],
['', 200, '200', 200, 800, '#4caf50'],
['', 150, '150', 150, 800, '#f44336'],
]);
var options = {
annotations: {
alwaysOutside: true,
textStyle: {
color: '#000000'
}
},
colors: ['#9e9e9e', '#2196f3'],
legend: 'none',
hAxis: {
gridlines: {
count: 0
},
textPosition: 'none'
},
series: {
1: {
lineWidth: 4,
type: 'line'
},
2: {
type: 'scatter'
}
}
};
var chart = new google.visualization.BarChart(document.getElementById('chart'));
google.visualization.events.addListener(chart, 'ready', function (sender) {
var padding = 16;
var chartLayout = chart.getChartLayoutInterface();
var containerBounds = chart.getContainer().getBoundingClientRect();
for (var row = 0; row < dataTable.getNumberOfRows(); row++) {
var pointBounds = chartLayout.getBoundingBox('point#2#' + row);
var dataLabel = document.createElement('span');
dataLabel.className = 'data-label';
dataLabel.innerHTML = 'Label ' + row;
dataLabel.style.top = (containerBounds.top + pointBounds.top - (pointBounds.height / 2)) + 'px';
dataLabel.style.left = (containerBounds.left + pointBounds.left + pointBounds.width + padding) + 'px';
chart.getContainer().appendChild(dataLabel);
}
});
chart.draw(dataTable, options);
});
.data-label {
position: absolute;
}
<script src="https://www.gstatic.com/charts/loader.js"></script>
<div id="chart"></div>