javascript - 谷歌图表 ChartWrapper 获取无效的列索引

标签 javascript charts google-visualization

我按照谷歌图表教程制作了一个 ControlWrapper 驱动两个图表,我准备了一个包含 4 列的数据集:

data = new google.visualization.DataTable();
data.addColumn('datetime', 'Time');
data.addColumn('number', 'col1');
data.addColumn('number', 'col2');
data.addColumn('number', 'col3');

然后我使用 ChartWrapper 设置了两个图表:

chart = new google.visualization.ChartWrapper({
     'chartType': 'LineChart',
      'containerId': 'chart1div',
      'options': {
            title: 'Chart1',
            curveType: 'function',
            legend: { position: 'bottom' },
            pointSize: 5,
            animation:{
                duration: 1000,
                easing: 'out',
                "startup": true
            },
            'chartArea': {'height': '90%', 'width': '90%'},
            hAxis: {
                gridlines: {
                    count: -1,
                    units: {
                        days: {format: ['MMM dd']},
                        hours: {format: ['HH:mm', 'ha']},
                    }
                },
                'slantedText': false,
                minorGridlines: {
                    units: {
                        hours: {format: ['hh:mm:ss a', 'ha']},
                        minutes: {format: ['HH:mm a Z', ':mm']}
                    }
                }
            },
            vAxis: {
                gridlines: {color: 'none'},
                minValue: 0
            }
      },
      'view': {'columns': [0, 1]}
    });

    chart2 = new google.visualization.ChartWrapper({
      'chartType': 'LineChart',
      'containerId': 'chart2div',
      'options': {
            title: 'chart2',
            curveType: 'function',
            legend: { position: 'bottom' },
            pointSize: 5,
            animation:{
                duration: 1000,
                easing: 'out',
                "startup": true
            },
            'chartArea': {'height': '90%', 'width': '90%'},
            hAxis: {
                gridlines: {
                    count: -1,
                    units: {
                        days: {format: ['MMM dd']},
                        hours: {format: ['HH:mm', 'ha']},
                    }
                },
                'slantedText': false,
                minorGridlines: {
                    units: {
                        hours: {format: ['hh:mm:ss a', 'ha']},
                        minutes: {format: ['HH:mm a Z', ':mm']}
                    }
                }
            },
            vAxis: {
                gridlines: {color: 'none'},
                minValue: 0
            }
      },
      'view': {'columns': [0,2]}
    });

然后:

timeRangeSlider = new google.visualization.ControlWrapper({
            'controlType': 'ChartRangeFilter',
            'containerId': 'filter_div',
            'options': {
                // Filter by the date axis.
                'filterColumnIndex': 0,
                'ui': {
                    'chartType': 'LineChart',
                    'chartOptions': {
                        'curveType': 'function',
                        'chartArea': {'width': '90%'},
                        //'hAxis': {'baselineColor': 'none'}
                        'hAxis': {
                            gridlines: {
                                count: -1,
                                units: {
                                    days: {format: ['MMM dd']},
                                    hours: {format: ['HH:mm', 'ha']},
                                }
                            },
                            'slantedText': false,
                            minorGridlines: {
                                units: {
                                    hours: {format: ['hh:mm:ss a', 'ha']},
                                    minutes: {format: ['HH:mm a Z', ':mm']}
                                }
                            }
                        }
                    },
                    'chartView': {
                        'columns': [0, 1, 2, 3]
                    },
                    'minRangeSize': 43200000
                }
            }
        });    
    dashboard = new google.visualization.Dashboard(document.getElementById('dashboard_div'));    
    dashboard.bind(timeRangeSlider, [chart, chart2]);
    dashboard.draw(data);

但是我得到了第二个图表的无效的列索引 2。应该是 [0-1] 范围内的整数,我不知道为什么,因为在数据集中有4 列,因此必须存在列索引 2!

有人经历过这样的事情吗?

最佳答案

在启动时使用 View 与动画结合使用时出现错误

删除"startup": true,错误就不会发生

请参阅以下工作片段...

google.charts.load('current', {
  callback: drawChart,
  packages:['corechart', 'controls']
});

function drawChart() {
  var data = new google.visualization.DataTable();
  data.addColumn('datetime', 'Time');
  data.addColumn('number', 'col1');
  data.addColumn('number', 'col2');
  data.addColumn('number', 'col3');

  for (var i= 0; i < 10; i++) {
    data.addRow([
      new Date(2017, 0, 6, (i + 1)),
      i * 1,
      i * 2,
      i * 3,
    ]);
  }

  chart = new google.visualization.ChartWrapper({
    'chartType': 'LineChart',
    'containerId': 'chart1div',
    'options': {
        title: 'Chart1',
        curveType: 'function',
        legend: { position: 'bottom' },
        pointSize: 5,
        animation:{
            duration: 1000,
            easing: 'out',
            "startup": true
        },
        'chartArea': {'height': '90%', 'width': '90%'},
        hAxis: {
            gridlines: {
                count: -1,
                units: {
                    days: {format: ['MMM dd']},
                    hours: {format: ['HH:mm', 'ha']},
                }
            },
            'slantedText': false,
            minorGridlines: {
                units: {
                    hours: {format: ['hh:mm:ss a', 'ha']},
                    minutes: {format: ['HH:mm a Z', ':mm']}
                }
            }
        },
        vAxis: {
            gridlines: {color: 'none'},
            minValue: 0
        }
      },
      'view': {'columns': [0, 1]}
    });

    chart2 = new google.visualization.ChartWrapper({
      'chartType': 'LineChart',
      'containerId': 'chart2div',
      dataTable: data,
      'options': {
          title: 'chart2',
          curveType: 'function',
          legend: { position: 'bottom' },
          pointSize: 5,
          animation:{
              duration: 1000,
              easing: 'out'
          },
          'chartArea': {'height': '90%', 'width': '90%'},
          hAxis: {
              gridlines: {
                  count: -1,
                  units: {
                      days: {format: ['MMM dd']},
                      hours: {format: ['HH:mm', 'ha']},
                  }
              },
              'slantedText': false,
              minorGridlines: {
                  units: {
                      hours: {format: ['hh:mm:ss a', 'ha']},
                      minutes: {format: ['HH:mm a Z', ':mm']}
                  }
              }
          },
          vAxis: {
              gridlines: {color: 'none'},
              minValue: 0
          }
      },
      'view': {'columns': [0, 2]}
    });
    chart2.draw();
    timeRangeSlider = new google.visualization.ControlWrapper({
        'controlType': 'ChartRangeFilter',
        'containerId': 'filter_div',
        'options': {
            // Filter by the date axis.
            'filterColumnIndex': 0,
            'ui': {
                'chartType': 'LineChart',
                'chartOptions': {
                    'curveType': 'function',
                    'chartArea': {'width': '90%'},
                    //'hAxis': {'baselineColor': 'none'}
                    'hAxis': {
                        gridlines: {
                            count: -1,
                            units: {
                                days: {format: ['MMM dd']},
                                hours: {format: ['HH:mm', 'ha']},
                            }
                        },
                        'slantedText': false,
                        minorGridlines: {
                            units: {
                                hours: {format: ['hh:mm:ss a', 'ha']},
                                minutes: {format: ['HH:mm a Z', ':mm']}
                            }
                        }
                    }
                },
                'chartView': {
                    'columns': [0, 1, 2, 3]
                },
                'minRangeSize': 43200000
            }
        }
    });

    dashboard = new google.visualization.Dashboard(document.getElementById('dashboard_div'));
    dashboard.bind(timeRangeSlider, [chart]);
    dashboard.draw(data);
}
<script src="https://www.gstatic.com/charts/loader.js"></script>
<div id="dashboard_div">
  <div id="chart1div"></div>
  <div id="chart2div"></div>
  <div id="filter_div"></div>
</div>

关于javascript - 谷歌图表 ChartWrapper 获取无效的列索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41512880/

相关文章:

javascript - 这个函数可以清理html吗?

javascript - 如何将时刻日期从时隙拆分为数组?

javascript - 使用 jQuery 移动事件处理程序

javascript - Chart.js 更改标签字体颜色

javascript - 无法输入 django Chartit 格式化程序字段

javascript - 全局变量、函数和 Javascript

javascript - 谷歌线图 - 设置较小的幅度

javascript - 为什么 "for"循环之外的 console.log 打印出 "extra"数字?

javascript - JavaScript 中的 Razor foreach 循环

javascript - Google Graph API 自定义工具提示加粗