google.charts.load('current', {
callback: function () {
drawVisualization();
window.addEventListener('resize', drawVisualization, false);
},
packages:['corechart']
});
function drawVisualization() {
var data = new google.visualization.DataTable();
data.addColumn('number', 'x');
data.addColumn('number', 'y');
data.addColumn({type: 'string', role: 'annotation'});
data.addRow([{v: 2, f: ''}, 0.8, '0.8x']);
data.addRow([{v: 2, f: ''}, 7.4, '7.4x']);
data.addRow([{v: 2, f: ''}, 12.2, '12.2x']);
var container = document.getElementById('visualization');
var chart = new google.visualization.ScatterChart(container);
var annotations = {};
google.visualization.events.addOneTimeListener(chart, 'ready', function () {
Array.prototype.forEach.call(container.getElementsByTagName('text'), function (text, index) {
if (text.getAttribute('text-anchor') === 'middle') {
annotations[index] = parseFloat(text.getAttribute('x')) + 20;
}
});
var observer = new MutationObserver(function () {
Array.prototype.forEach.call(container.getElementsByTagName('text'), function (text, index) {
if (text.getAttribute('text-anchor') === 'middle') {
text.setAttribute('x', annotations[index]);
}
});
});
observer.observe(container, {
childList: true,
subtree: true
});
});
chart.draw(data, {
annotations: {
stem: {
length: -5
}
},
hAxis: {
ticks: [
{v: 0, f: ''},
{v: 1, f: ''},
{v: 2, f: ''},
{v: 3, f: ''},
{v: 4, f: ''}
]
}
});
}
<script src="https://www.gstatic.com/charts/loader.js"></script>
<div id="visualization"></div>