javascript - 小块调整谷歌柱形图数据
问题描述
我已经绘制了谷歌图表如下(请输入图片)在此处输入图片描述。有什么方法可以一次显示 5 年图表并在滑块中调整剩余的图表。
<html>
<head>
<script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
<script type="text/javascript">
google.charts.load('current', {'packages':['bar']});
google.charts.setOnLoadCallback(drawChart);
function drawChart() {
var data = google.visualization.arrayToDataTable([
['Year', 'Sales', 'Expenses', 'Profit'],
['2001', 1001, 400, 200],
['2002', 1002, 400, 200],
['2003', 1003, 400, 200],
['2004', 1004, 400, 200],
['2005', 1005, 400, 200],
['2006', 1006, 400, 200],
['2007', 1007, 400, 200],
['2008', 1008, 400, 200],
['2009', 1009, 400, 200],
['2010', 1010, 400, 200],
['2011', 1011, 400, 200],
['2012', 1012, 400, 200],
['2013', 1013, 400, 200],
['2014', 1014, 400, 200],
['2015', 1170, 460, 250],
['2016', 660, 1120, 300],
['2017', 1030, 540, 350],
['2018', 1030, 540, 350],
['2019', 1030, 540, 350],
['2020', 1030, 540, 350]
]);
var options = {
chart: {
title: 'Company Performance',
subtitle: 'Sales, Expenses, and Profit: 2000-2020',
}
};
var chart = new google.charts.Bar(document.getElementById('columnchart_material'));
chart.draw(data, google.charts.Bar.convertOptions(options));
}
</script>
</head>
<body>
<div id="columnchart_material" style="width: 800px; height: 500px;"></div>
</body>
</html>
我想先显示 2000-2005 年的数据,然后是 2006-2010 年的 2011-2015 年和最后的 2016-2020 年的数据。
解决方案
我们可以使用谷歌的控件和仪表板来绘制带有附加范围过滤器的图表。
我们使用ChartWrapper 类来绘制图表。
var chart = new google.visualization.ChartWrapper({
chartType: 'Bar',
containerId: 'columnchart_material',
options: google.charts.Bar.convertOptions({
chart: {
title: 'Company Performance',
subtitle: 'Sales, Expenses, and Profit: 2000-2020',
},
hAxis: {
format: '0000'
}
})
});
而ControlWrapper类创建ChartRangeFilter控件
我们在定义范围过滤器的时候,我们可以设置initialstate
属性,
来显示2000-2005的初始范围
var control = new google.visualization.ControlWrapper({
controlType: 'ChartRangeFilter',
containerId: 'control_range_filter',
options: {
filterColumnIndex: 0,
ui: {
chartOptions: {
hAxis: {
format: '0000'
}
}
}
},
state: {
range: {
start: 2000,
end : 2005
}
}
});
我们使用Dashboard 类将两者绑定在一起并绘制仪表板。
var dashboard = new google.visualization.Dashboard(document.getElementById('dashboard')); 仪表板.bind(控件,图表);仪表板.draw(数据);
您还可以在单个仪表板中拥有多个图表和控件。
只需将每个数组传递给绑定方法,例如
dashboard.bind([control1, control2], [chart1, chart2]);
唯一真正的区别是范围过滤器必须设置为数字或日期列。
它不能使用字符串列。
所以我们必须将数据中的第一列更改为数字(2001
)与字符串('2001'
)...
请参阅以下工作片段...
(使用片段顶部的完整页面链接)
google.charts.load('47', {
packages: ['controls', 'bar']
}).then(function () {
var data = google.visualization.arrayToDataTable([
['Year', 'Sales', 'Expenses', 'Profit'],
[2001, 1001, 400, 200],
[2002, 1002, 400, 200],
[2003, 1003, 400, 200],
[2004, 1004, 400, 200],
[2005, 1005, 400, 200],
[2006, 1006, 400, 200],
[2007, 1007, 400, 200],
[2008, 1008, 400, 200],
[2009, 1009, 400, 200],
[2010, 1010, 400, 200],
[2011, 1011, 400, 200],
[2012, 1012, 400, 200],
[2013, 1013, 400, 200],
[2014, 1014, 400, 200],
[2015, 1170, 460, 250],
[2016, 660, 1120, 300],
[2017, 1030, 540, 350],
[2018, 1030, 540, 350],
[2019, 1030, 540, 350],
[2020, 1030, 540, 350]
]);
var chart = new google.visualization.ChartWrapper({
chartType: 'Bar',
containerId: 'columnchart_material',
options: google.charts.Bar.convertOptions({
chart: {
title: 'Company Performance',
subtitle: 'Sales, Expenses, and Profit: 2000-2020',
},
hAxis: {
format: '0000'
}
})
});
var control = new google.visualization.ControlWrapper({
controlType: 'ChartRangeFilter',
containerId: 'control_range_filter',
options: {
filterColumnIndex: 0,
ui: {
chartOptions: {
hAxis: {
format: '0000'
}
}
}
},
state: {
range: {
start: 2000,
end : 2005
}
}
});
var dashboard = new google.visualization.Dashboard(
document.getElementById('dashboard')
);
dashboard.bind(control, chart);
dashboard.draw(data);
window.addEventListener('resize', function () {
dashboard.draw(data);
});
});
html, body {
height: 100%;
margin: 0px 0px 0px 0px;
overflow: hidden;
padding: 0px 0px 0px 0px;
}
#dashboard {
height: 100%;
}
#columnchart_material {
height: 80%;
}
#control_range_filter {
height: 20%;
}
<script src="https://www.gstatic.com/charts/loader.js"></script>
<div id="dashboard">
<div id="columnchart_material"></div>
<div id="control_range_filter"></div>
</div>
推荐阅读
- android - 保持 Facebook 访问令牌始终处于活动状态
- java - jaxb 依赖项的 Java 11 问题
- python - 更改一个实例如何会更改 NURBS-python/geomdl 中的所有其他实例?
- django - 我需要帮助将存储在 DateTimeField 中的年份与当前年份进行比较并计算匹配的项目数
- c++ - 调用方法时可以设置类实例吗?
- java - 无法解析符号“DaggerAppComponent”
- codenameone - Codenameone 连接域名 url 时偶尔会看到 ConnectException
- sql - 计算每天的状态 ID
- php - 不能同时有两条路线
- python - Python正则表达式查找字符串中带有逗号的任何单词