如何在谷歌可视化图表中添加图像.
下面是我正在尝试的脚本
google.setOnLoadCallback(drawChart); function drawChart() { var container = document.getElementById('example4.2'); var chart = new google.visualization.Timeline(container); var dataTable = new google.visualization.DataTable(); dataTable.addColumn({ type: 'string',id: 'Role' }); dataTable.addColumn({ type: 'string',id: 'Name' }); dataTable.addColumn({ type: 'date',id: 'Start' }); dataTable.addColumn({ type: 'date',id: 'End' }); dataTable.addRows([ [ 'President','George Washington',new Date(0,12,0),3,0) ],[ 'President','<img class="devsite-avatar" src="http://i.stack.imgur.com/FVDLV.jpg?s=32&g=1">John Adams',3),14,'Thomas Jefferson',15,1),28,'',13,0) ] ]); var options = { timeline: { groupByRowLabel: true },allowHTML: true,avoidOverlappingGridLines: false }; chart.draw(dataTable,options); }
<script type="text/javascript" src="https://www.google.com/jsapi?autoload={'modules':[{'name':'visualization','version':'1','packages':['timeline']}]}"></script> <div id="example4.2" style="height: 200px;"></div>
请帮助我理解我在这里缺少的东西.
解决方法
似乎google.visualization.Timeline对象不支持allowHTML选项,但是您可以考虑在呈现图表后自定义SVG(在此示例中将图像插入到条形图中),如下所示:
google.load('visualization','1.0',{ 'packages': ['timeline','annotatedtimeline'] }); google.setOnLoadCallback(drawChart); function drawChart() { var container = document.getElementById('example4.2'); var chart = new google.visualization.Timeline(container); var dataTable = new google.visualization.DataTable(); dataTable.addColumn({ type: 'string',id: 'Role' }); dataTable.addColumn({ type: 'string',id: 'Name' }); dataTable.addColumn({ type: 'date',id: 'Start' }); dataTable.addColumn({ type: 'date',id: 'End' }); dataTable.addRows([ ['President',new Date(1789,30),new Date(1797,2,4)],['President','John Adams',4),new Date(1801,new Date(1809,4)]]); var options = { timeline: { groupByRowLabel: false} }; chart.draw(dataTable,options); configureChart(); } function configureChart() { var chartContainer = document.getElementById('example4.2'); var svg = chartContainer.getElementsByTagName('svg')[0]; var barLabels = svg.querySelectorAll("text[text-anchor='start']"); for (var i = 0; i < barLabels.length; i++) { if (barLabels[i].innerHTML == "George Washington") { var barArea = barLabels[i].prevIoUsSibling; var x = barArea.getAttribute('x'); var y = barArea.getAttribute('y'); var presidentIcon = createImage({ href: 'https://upload.wikimedia.org/wikipedia/commons/e/e4/Lawrence_Washington.jpg',x: x,y: y,width: 20,height: 20 }); barArea.parentElement.appendChild(presidentIcon); barLabels[i].setAttribute('x',parseFloat(x) + 20); } } } function createImage(options) { var image = document.createElementNS('http://www.w3.org/2000/svg','image'); image.setAttributeNS(null,'height',options.height); image.setAttributeNS(null,'width',options.width); image.setAttributeNS('http://www.w3.org/1999/xlink','href',options.href); image.setAttributeNS(null,'x',options.x); image.setAttributeNS(null,'y',options.y); image.setAttributeNS(null,'visibility','visible'); return image; }
<script type="text/javascript" src="https://www.google.com/jsapi"></script> <div id="example4.2" style="height: 600px;"></div>