简体   繁体   English

同一页面上有多个Google图表

[英]Multiple Google charts on the same page

I'm trying to create a POC of a stock portfolio. 我正在尝试创建股票投资组合的POC。
I'm using Google charts to do it. 我正在使用Google图表来做到这一点。
I want to generate 3 charts: one for each stock (I have two stocks) and one for both of them. 我想生成3张图表:每只股票一张(我有两只股票),而两只股票一张。
in my html I've created three divs (using some guids) 在我的html中,我创建了三个div(使用了一些Guid)

<div id="e480c510499e4bbdaa8ae8e4a1001cd8"></div>
<div id="2dea80b0fabd43bba019dbc3ddf342aa"></div>
<div id="linechart_material"></div>

and I've generated a javascript that is supposed to populate the divs 我已经生成了一个应该填充div的JavaScript

    $(document).ready(function() {
$('[data-toggle="tooltip"]').tooltip();
});
google.load('visualization', '1.1', { 'packages': ['line'] });

google.setOnLoadCallback(drawChart);

function drawChart() {
var data = new google.visualization.DataTable();
data.addColumn('date', 'Day');

data.addColumn('number', 'Company #4');
data.addColumn('number', 'Company #2');
data.addRow([new Date(2015, 11,  27), 12.7389789250395,4.10950499778125]);
data.addRow([new Date(2015, 11,  26), 6.76681987790708,8.38212726329552]);
data.addRow([new Date(2015, 11,  25), 15.7216755155109,4.36060299741132]);
data.addRow([new Date(2015, 11,  24), 7.44940381844035,3.34093286951116]);
data.addRow([new Date(2015, 11,  23), 9.02574470221333,10.0405249521325]);
data.addRow([new Date(2015, 11,  22), 11.9767397269498,5.29850781210629]);
data.addRow([new Date(2015, 11,  21), 14.5598888055235,6.3867255497662]);
data.addRow([new Date(2015, 11,  20), 12.2693184056642,3.70270192981823]);
data.addRow([new Date(2015, 11,  19), 8.29967047194935,17.0856299675469]);
data.addRow([new Date(2015, 11,  18), 12.9148372020176,4.37814835290338]);
var options = {
title: 'Stock Performance',
width: 900,
height: 500
};

var chart = new google.charts.Line(document.getElementById('linechart_material'));
chart.draw(data, options);

var data0 = new google.visualization.DataTable();
data0.addColumn('date', 'Day');
data0.addColumn('number', 'Company #4');
data0.addRow([new Date(2015, 11,  27), 12.7389789250395]);
data0.addRow([new Date(2015, 11,  26), 6.76681987790708]);
data0.addRow([new Date(2015, 11,  25), 15.7216755155109]);
data0.addRow([new Date(2015, 11,  24), 7.44940381844035]);
data0.addRow([new Date(2015, 11,  23), 9.02574470221333]);
data0.addRow([new Date(2015, 11,  22), 11.9767397269498]);
data0.addRow([new Date(2015, 11,  21), 14.5598888055235]);
data0.addRow([new Date(2015, 11,  20), 12.2693184056642]);
data0.addRow([new Date(2015, 11,  19), 8.29967047194935]);
data0.addRow([new Date(2015, 11,  18), 12.9148372020176]);
var options0 = {
title: 'Stock Performance',
width: 300,
height: 300
};

var chart0 = new google.charts.Line(document.getElementById('e480c510499e4bbdaa8ae8e4a1001cd8'));
chart0.draw(data0, options0);

var data1 = new google.visualization.DataTable();
data1.addColumn('date', 'Day');
data1.addColumn('number', 'Company #2');
data1.addRow([new Date(2015, 11,  27), 4.10950499778125]);
data1.addRow([new Date(2015, 11,  26), 8.38212726329552]);
data1.addRow([new Date(2015, 11,  25), 4.36060299741132]);
data1.addRow([new Date(2015, 11,  24), 3.34093286951116]);
data1.addRow([new Date(2015, 11,  23), 10.0405249521325]);
data1.addRow([new Date(2015, 11,  22), 5.29850781210629]);
data1.addRow([new Date(2015, 11,  21), 6.3867255497662]);
data1.addRow([new Date(2015, 11,  20), 3.70270192981823]);
data1.addRow([new Date(2015, 11,  19), 17.0856299675469]);
data1.addRow([new Date(2015, 11,  18), 4.37814835290338]);
var options1 = {
title: 'Stock Performance',
width: 300,
height: 300
};

var chart1 = new google.charts.Line(document.getElementById('2dea80b0fabd43bba019dbc3ddf342aa'));
chart1.draw(data1, options1);

}

The problem is that each time the page loads, only one of the three charts is being rendered. 问题在于,每次页面加载时,仅呈现三个图表之一。 (Each time a different one) (每次都不一样)
Anyone has ever encountered such issue? 有人遇到过这样的问题吗?

The same issue was reported in google-visualization-issues repository: google-visualization-issues存储库中报告了相同的问题

The problems people have seen with the sizing of multiple instances of material charts should be resolved with this new release. 人们在使用物料图的多个实例确定大小时所遇到的问题应通过此新版本解决。 You can change your code to load "1.1" now so that when the candidate release becomes available, you will be using it. 您可以更改代码以立即加载“ 1.1”,以便在候选版本可用时使用。

There are at least two solutions available at the moment: 目前至少有两种解决方案可用:

Option 1. Using the frozen version loader. 选项1.使用冻结的版本加载器。

Since 以来

The rollout of the v43 candidate release that would fix this problem v43候选版本的推出将解决此问题

switch to using the frozen version loader. 切换到使用冻结版本加载器。

Steps: 脚步:

1)Add a reference to loader: <script src="http://www.gstatic.com/charts/loader.js"></script> 1)添加对加载程序的引用: <script src="http://www.gstatic.com/charts/loader.js"></script>

2)Then load a 43 version of library: google.charts.load("43",{packages:["line"]}); 2)然后加载43版本的库: google.charts.load("43",{packages:["line"]});

3)Replace: 3)更换:

google.setOnLoadCallback(drawChart);

with

google.charts.setOnLoadCallback(drawChart);

Example

 google.charts.load("43",{packages:["line"]}); google.charts.setOnLoadCallback(drawChart); function drawChart() { var data = new google.visualization.DataTable(); data.addColumn('date', 'Day'); data.addColumn('number', 'Company #4'); data.addColumn('number', 'Company #2'); data.addRow([new Date(2015, 11, 27), 12.7389789250395,4.10950499778125]); data.addRow([new Date(2015, 11, 26), 6.76681987790708,8.38212726329552]); data.addRow([new Date(2015, 11, 25), 15.7216755155109,4.36060299741132]); data.addRow([new Date(2015, 11, 24), 7.44940381844035,3.34093286951116]); data.addRow([new Date(2015, 11, 23), 9.02574470221333,10.0405249521325]); data.addRow([new Date(2015, 11, 22), 11.9767397269498,5.29850781210629]); data.addRow([new Date(2015, 11, 21), 14.5598888055235,6.3867255497662]); data.addRow([new Date(2015, 11, 20), 12.2693184056642,3.70270192981823]); data.addRow([new Date(2015, 11, 19), 8.29967047194935,17.0856299675469]); data.addRow([new Date(2015, 11, 18), 12.9148372020176,4.37814835290338]); var options = { title: 'Stock Performance', width: 900, height: 500 }; var chart = new google.charts.Line(document.getElementById('linechart_material')); chart.draw(data, options); var data0 = new google.visualization.DataTable(); data0.addColumn('date', 'Day'); data0.addColumn('number', 'Company #4'); data0.addRow([new Date(2015, 11, 27), 12.7389789250395]); data0.addRow([new Date(2015, 11, 26), 6.76681987790708]); data0.addRow([new Date(2015, 11, 25), 15.7216755155109]); data0.addRow([new Date(2015, 11, 24), 7.44940381844035]); data0.addRow([new Date(2015, 11, 23), 9.02574470221333]); data0.addRow([new Date(2015, 11, 22), 11.9767397269498]); data0.addRow([new Date(2015, 11, 21), 14.5598888055235]); data0.addRow([new Date(2015, 11, 20), 12.2693184056642]); data0.addRow([new Date(2015, 11, 19), 8.29967047194935]); data0.addRow([new Date(2015, 11, 18), 12.9148372020176]); var options0 = { title: 'Stock Performance', width: 300, height: 300 }; var chart0 = new google.charts.Line(document.getElementById('e480c510499e4bbdaa8ae8e4a1001cd8')); chart0.draw(data0, options0); var data1 = new google.visualization.DataTable(); data1.addColumn('date', 'Day'); data1.addColumn('number', 'Company #2'); data1.addRow([new Date(2015, 11, 27), 4.10950499778125]); data1.addRow([new Date(2015, 11, 26), 8.38212726329552]); data1.addRow([new Date(2015, 11, 25), 4.36060299741132]); data1.addRow([new Date(2015, 11, 24), 3.34093286951116]); data1.addRow([new Date(2015, 11, 23), 10.0405249521325]); data1.addRow([new Date(2015, 11, 22), 5.29850781210629]); data1.addRow([new Date(2015, 11, 21), 6.3867255497662]); data1.addRow([new Date(2015, 11, 20), 3.70270192981823]); data1.addRow([new Date(2015, 11, 19), 17.0856299675469]); data1.addRow([new Date(2015, 11, 18), 4.37814835290338]); var options1 = { title: 'Stock Performance', width: 300, height: 300 }; var chart1 = new google.charts.Line(document.getElementById('2dea80b0fabd43bba019dbc3ddf342aa')); chart1.draw(data1, options1); } 
 <script src="http://www.google.com/jsapi"></script> <script src="http://www.gstatic.com/charts/loader.js"></script> <div id="e480c510499e4bbdaa8ae8e4a1001cd8"></div> <div id="2dea80b0fabd43bba019dbc3ddf342aa"></div> <div id="linechart_material"></div> 

Option 2. Render charts synchronously 选项2。同步渲染图表

Since draw function is asynchronous, we utilize ready event handler to draw charts sequentially, in that case multiple chart should be rendered properly as demonstrated below. 由于draw功能是异步的,因此我们利用ready事件处理程序按顺序绘制图表,在这种情况下,应正确呈现多个图表,如下所示。

Example

 google.load('visualization', '1.1', { 'packages': ['line'] }); google.setOnLoadCallback(drawChart); function drawChart() { var data = new google.visualization.DataTable(); data.addColumn('date', 'Day'); data.addColumn('number', 'Company #4'); data.addColumn('number', 'Company #2'); data.addRow([new Date(2015, 11, 27), 12.7389789250395,4.10950499778125]); data.addRow([new Date(2015, 11, 26), 6.76681987790708,8.38212726329552]); data.addRow([new Date(2015, 11, 25), 15.7216755155109,4.36060299741132]); data.addRow([new Date(2015, 11, 24), 7.44940381844035,3.34093286951116]); data.addRow([new Date(2015, 11, 23), 9.02574470221333,10.0405249521325]); data.addRow([new Date(2015, 11, 22), 11.9767397269498,5.29850781210629]); data.addRow([new Date(2015, 11, 21), 14.5598888055235,6.3867255497662]); data.addRow([new Date(2015, 11, 20), 12.2693184056642,3.70270192981823]); data.addRow([new Date(2015, 11, 19), 8.29967047194935,17.0856299675469]); data.addRow([new Date(2015, 11, 18), 12.9148372020176,4.37814835290338]); var options = { title: 'Stock Performance', width: 900, height: 500 }; var data0 = new google.visualization.DataTable(); data0.addColumn('date', 'Day'); data0.addColumn('number', 'Company #4'); data0.addRow([new Date(2015, 11, 27), 12.7389789250395]); data0.addRow([new Date(2015, 11, 26), 6.76681987790708]); data0.addRow([new Date(2015, 11, 25), 15.7216755155109]); data0.addRow([new Date(2015, 11, 24), 7.44940381844035]); data0.addRow([new Date(2015, 11, 23), 9.02574470221333]); data0.addRow([new Date(2015, 11, 22), 11.9767397269498]); data0.addRow([new Date(2015, 11, 21), 14.5598888055235]); data0.addRow([new Date(2015, 11, 20), 12.2693184056642]); data0.addRow([new Date(2015, 11, 19), 8.29967047194935]); data0.addRow([new Date(2015, 11, 18), 12.9148372020176]); var options0 = { title: 'Stock Performance', width: 300, height: 300 }; var data1 = new google.visualization.DataTable(); data1.addColumn('date', 'Day'); data1.addColumn('number', 'Company #2'); data1.addRow([new Date(2015, 11, 27), 4.10950499778125]); data1.addRow([new Date(2015, 11, 26), 8.38212726329552]); data1.addRow([new Date(2015, 11, 25), 4.36060299741132]); data1.addRow([new Date(2015, 11, 24), 3.34093286951116]); data1.addRow([new Date(2015, 11, 23), 10.0405249521325]); data1.addRow([new Date(2015, 11, 22), 5.29850781210629]); data1.addRow([new Date(2015, 11, 21), 6.3867255497662]); data1.addRow([new Date(2015, 11, 20), 3.70270192981823]); data1.addRow([new Date(2015, 11, 19), 17.0856299675469]); data1.addRow([new Date(2015, 11, 18), 4.37814835290338]); var options1 = { title: 'Stock Performance', width: 300, height: 300 }; var chart = new google.charts.Line(document.getElementById('linechart_material')); google.visualization.events.addOneTimeListener(chart, 'ready', function(){ var chart0 = new google.charts.Line(document.getElementById('e480c510499e4bbdaa8ae8e4a1001cd8')); google.visualization.events.addOneTimeListener(chart0, 'ready', function(){ var chart1 = new google.charts.Line(document.getElementById('2dea80b0fabd43bba019dbc3ddf342aa')); chart1.draw(data1, options1); }); chart0.draw(data0, options0); }); chart.draw(data, options); } 
 <script src="http://www.google.com/jsapi"></script> <div id="e480c510499e4bbdaa8ae8e4a1001cd8"></div> <div id="2dea80b0fabd43bba019dbc3ddf342aa"></div> <div id="linechart_material"></div> 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM