- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我在尝试使用对 Google 工作表的两个查询来设置包含两个图表和两个控件包装器的 Google Charts 仪表板时遇到了麻烦。
我已经浏览了这里的许多示例,演示了来自单一来源的多个图表,或多个图表的多个查询,但没有控制方面。
我最终尝试运行单个 Google 工作表的两个查询,每个查询根据查询字符串从工作表中提取一组不同的数据,然后在图表中显示数据。还有一个 filterColumn 控件包装器,用于从数据表中选择数据。
我有以下代码,适用于一个查询和图表。当我尝试将过程加倍以便可以在一页中显示这两个过程时,将出现一个或另一个图形,但不会同时出现。我知道这可能与查询之间的冲突有关,但我不明白。我尝试构建一个函数来运行由 google.setOnLoadCallback 函数启动的两个查询。然而,这没有用。我尝试使用其他示例作为指南来组合各个部分,但这些不起作用。这是最接近的版本,当我连续刷新几次时,有时会加载一个图表,有时会加载另一个图表,但绝不会同时加载两者。
如果有人能指出我正确的方向,我将不胜感激。
<html>
<head>
<title>Google visualisation demo: chart query controls</title>
<!--Load the AJAX API-->
<script type="text/javascript" src="https://www.google.com/jsapi"></script>
<script type="text/javascript">
// Load the Visualization API and the controls package.
// Packages for all the other charts you need will be loaded
// automatically by the system.
google.load('visualization', '1.1', {
'packages': ['controls', 'linechart', 'corechart']
});
// Set a callback to run when the Google Visualization API is loaded.
google.setOnLoadCallback(initialize);
google.setOnLoadCallback(initialize2);
function initialize() {
var queryString = encodeURIComponent("select B, ((5-avg(F))*.4) + ((5-avg(G))*.4) + ((5-avg(H))*.2) + ((5-avg(I))*.125) + ((5-avg(J))*.125) where C contains 'Sept 26' and E contains 'Forced' group by B");
// Replace the data source URL on next line with your data source URL.
var query = new google.visualization.Query('https://docs.google.com/spreadsheets/d/1_DuiDpbRyegaN0zYR4iYp8ZXefO-kIV-F054e9aIcIY/gviz/tq?gid=1757506986&headers=1&tq=' + queryString);
// Send the query with a callback function.
query.send(drawDashboard);
}
function initialize2() {
var queryString2 = encodeURIComponent("select B, ((5-avg(F))*.4) + ((5-avg(G))*.4) + ((5-avg(H))*.2) + ((5-avg(I))*.125) + ((5-avg(J))*.125) where C contains 'Sept 26' and E contains 'Unforced' group by B");
var query2 = new google.visualization.Query('https://docs.google.com/spreadsheets/d/1_DuiDpbRyegaN0zYR4iYp8ZXefO-kIV-F054e9aIcIY/gviz/tq?gid=1757506986&headers=1&tq=' + queryString2);
// Send the query with a callback function.
query2.send(drawDashboard2);
}
function drawDashboard(response) {
var data = response.getDataTable();
// Everything is loaded. Assemble your dashboard...
var namePicker = new google.visualization.ControlWrapper({
'controlType': 'CategoryFilter',
'containerId': 'filter_div',
'options': {
'filterColumnLabel': 'Sample ID',
'ui': {
'labelStacking': 'vertical',
'allowTyping': false,
'allowMultiple': false
}
}
});
var laptimeChart = new google.visualization.ChartWrapper({
'chartType': 'Bar',
'containerId': 'chart_div',
'dataSourceUrl': 'https://docs.google.com/spreadsheets/d/1_DuiDpbRyegaN0zYR4iYp8ZXefO-kIV-F054e9aIcIY/gviz/tq?gid=1757506986&headers=1',
'query': "select B, ((5-avg(F))*.4) + ((5-avg(G))*.4) + ((5-avg(H))*.2) + ((5-avg(I))*.125) + ((5-avg(J))*.125) where C contains 'Sept 26' and E contains 'Forced' group by B",
'options': {
'width': 1600,
'height': 800,
axes: {
x: {
0: {
side: 'top',
label: 'Sample ID'
} // Top x-axis.
}
},
chart: {
title: 'Aging Panel Results',
subtitle: 'Beer force-aged for 2 weeks',
},
'legend': {
position: 'none'
},
'colors': ['#ed8907']
}
});
var dashboard = new google.visualization.Dashboard(document.getElementById('dashboard_div')).
bind(namePicker, laptimeChart).
draw(data)
}
function drawDashboard2(response2) {
var data2 = response2.getDataTable();
// Everything is loaded. Assemble your dashboard...
var namePicker2 = new google.visualization.ControlWrapper({
'controlType': 'CategoryFilter',
'containerId': 'filter_div2',
'options': {
'filterColumnLabel': 'Sample ID',
'ui': {
'labelStacking': 'vertical',
'allowTyping': false,
'allowMultiple': false
}
}
});
var laptimeChart2 = new google.visualization.ChartWrapper({
'chartType': 'Bar',
'containerId': 'chart_div2',
'options': {
'width': 1600,
'height': 800,
axes: {
x: {
0: {
side: 'top',
label: 'Sample ID'
} // Top x-axis.
}
},
chart: {
title: 'Aging Panel Results',
subtitle: 'Beer aged 2 weeks',
},
'legend': {
position: 'none'
},
'colors': ['Red']
}
});
var dashboard = new google.visualization.Dashboard(document.getElementById('dashboard_div2')).
bind(namePicker2, laptimeChart2).
draw(data2)
}
</script>
</head>
<body>
<!--Div that will hold the dashboard-->
<div id="dashboard_div">
<!--Divs that will hold each control and chart-->
<div id="filter_div"></div>
<div id="chart_div"></div>
</div>
<div id="dashboard_div2">
<!--Divs that will hold each control and chart-->
<div id="filter_div2"></div>
<div id="chart_div2"></div>
</div>
</body>
</html>
最佳答案
首先,需要使用loader.js
用于加载库,
这个...
<script src="https://www.gstatic.com/charts/loader.js"></script>
不是这个...
<script src="https://www.google.com/jsapi"></script>
根据release notes ...
The version of Google Charts that remains available via the
jsapi
loader is no longer being updated consistently. Please use the new gstatic loader from now on.
第二,您应该只使用google.setOnLoadCallback
每页一次
它也可以包含在 google.charts.load
中语句,如下例所示
下一步chartType
不正确,需要存在于 packages
中已加载
对于核心图表,加载包'corechart'
并使用 --> chartType: 'BarChart'
对于 Material 图表,加载包:'bar'
--> chartType: 'Bar'
(不建议使用 Material 图表,有几个选项不起作用)
最后,由于图表包装器是使用仪表板绘制的,
不需要这些选项 --> 'dataSourceUrl'
或'query'
请参阅以下工作片段...
google.charts.load('current', {
callback: function () {
var queryString = encodeURIComponent("select B, ((5-avg(F))*.4) + ((5-avg(G))*.4) + ((5-avg(H))*.2) + ((5-avg(I))*.125) + ((5-avg(J))*.125) where C contains 'Sept 26' and E contains 'Forced' group by B");
var query = new google.visualization.Query('https://docs.google.com/spreadsheets/d/1_DuiDpbRyegaN0zYR4iYp8ZXefO-kIV-F054e9aIcIY/gviz/tq?gid=1757506986&headers=1&tq=' + queryString);
query.send(drawDashboard);
var queryString2 = encodeURIComponent("select B, ((5-avg(F))*.4) + ((5-avg(G))*.4) + ((5-avg(H))*.2) + ((5-avg(I))*.125) + ((5-avg(J))*.125) where C contains 'Sept 26' and E contains 'Unforced' group by B");
var query2 = new google.visualization.Query('https://docs.google.com/spreadsheets/d/1_DuiDpbRyegaN0zYR4iYp8ZXefO-kIV-F054e9aIcIY/gviz/tq?gid=1757506986&headers=1&tq=' + queryString2);
query2.send(drawDashboard2);
},
packages: ['controls', 'corechart']
});
function drawDashboard(response) {
var namePicker = new google.visualization.ControlWrapper({
controlType: 'CategoryFilter',
containerId: 'filter_div',
options: {
filterColumnLabel: 'Sample ID',
ui: {
labelStacking: 'vertical',
allowTyping: false,
allowMultiple: false
}
}
});
var laptimeChart = new google.visualization.ChartWrapper({
chartType: 'BarChart',
containerId: 'chart_div',
options: {
width: 1600,
height: 800,
axes: {
x: {
0: {
side: 'top',
label: 'Sample ID'
}
}
},
chart: {
title: 'Aging Panel Results',
subtitle: 'Beer force-aged for 2 weeks',
},
legend: {
position: 'none'
},
colors: ['#ed8907']
}
});
var dashboard = new google.visualization.Dashboard(document.getElementById('dashboard_div')).
bind(namePicker, laptimeChart).
draw(response.getDataTable());
}
function drawDashboard2(response) {
var namePicker = new google.visualization.ControlWrapper({
controlType: 'CategoryFilter',
containerId: 'filter_div2',
options: {
filterColumnLabel: 'Sample ID',
ui: {
labelStacking: 'vertical',
allowTyping: false,
allowMultiple: false
}
}
});
var laptimeChart = new google.visualization.ChartWrapper({
chartType: 'BarChart',
containerId: 'chart_div2',
options: {
width: 1600,
height: 800,
axes: {
x: {
0: {
side: 'top',
label: 'Sample ID'
}
}
},
chart: {
title: 'Aging Panel Results',
subtitle: 'Beer force-aged for 2 weeks',
},
legend: {
position: 'none'
},
colors: ['#ed8907']
}
});
var dashboard = new google.visualization.Dashboard(document.getElementById('dashboard_div2')).
bind(namePicker, laptimeChart).
draw(response.getDataTable());
}
<script src="https://www.gstatic.com/charts/loader.js"></script>
<div id="dashboard_div">
<div id="filter_div"></div>
<div id="chart_div"></div>
</div>
<div id="dashboard_div2">
<div id="filter_div2"></div>
<div id="chart_div2"></div>
</div>
关于javascript - 如何在 Google Charts 仪表板中运行两个查询并使用控件显示两个图表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39887008/
我已经能够在我的 Centos 7 服务器上成功设置 kubernetes。 在遵循 documentation 之后尝试使仪表板工作,运行“kubectl 代理”它 尝试使用 127.0.0.1:9
我正在尝试为用作仪表板的网络应用程序设计数据库架构。 可以有任意数量的仪表板(用户可以创建新的仪表板) 每个仪表板都与团队相关联(每个仪表板大约 10-25 个团队) 每个团队都有成员(每个团队约 1
我已经在 Windows VM 上部署了 minikube,并且 minikube VM 是在 Virtualbox 上使用仅主机 IP 创建的。 我已经使用 NodePort IP 部署了 Kube
我刚刚安装了 xampp-win32-5.5.30 并且在 xampp 控制面板中 Apache 和 mysql 都启动没有任何错误,但我发现: 1) 本地主机 在我的浏览器中重定向到另一个页面 本地
我是 ReactJS 的新手。我想在我的项目中使用 ReactJS-AdminLTE。谁能告诉我如何逐步使用它。 我遵循的步骤 1) 我使用 https://www.tutorialspoint.co
我们正在创建一个仪表板,用于显示给定系统在一段时间内(具体来说是过去 24 小时)内的异常数量。该图如下所示: 如果您仔细观察,最后一个柱形图是一天前的,而不是今天(请参阅图表中最后一个柱形图生成的时
我已经通过 Kubespray 成功部署了 Kubernetes,一切似乎都工作正常。我可以通过 kubectl 访问集群并列出节点、pod、服务、 secret 等。还可以应用新资源,仪表板端点可以
我在本地使用 KUBEADM 工具配置了具有 1 个主节点和 4 个工作节点的 kubernetes 集群。所有节点都运行良好。部署了一个应用程序并能够从浏览器访问该应用程序。我尝试了很多方法来使用
我们正在创建一个仪表板,用于显示给定系统在一段时间内(具体来说是过去 24 小时)内的异常数量。该图如下所示: 如果您仔细观察,最后一个柱形图是一天前的,而不是今天(请参阅图表中最后一个柱形图生成的时
我在 DashBoard Demo 看到了 PrimeFaces 仪表板演示。我目前有 PrimeFaces 1.1 jar。它可以工作还是我必须升级到下一个版本?我正在使用 JSF 1.2 和 Se
我不熟悉 Bootstrap 、HTML 以及与 Web 开发有关的所有内容。我正在使用 bootstrap 构建仪表板,我设法使基本布局正确。我的仪表板有一个顶部和侧面导航栏。 我现在想在不同页面之
这个问题在这里已经有了答案: Starting Shiny app after password input (6 个答案) 关闭 2 年前。 我正在制作一个 Shiny 的应用程序,它将显示一个仪
我正在尝试将 Grafana 仪表板的导入复制到 Grafana。 我正在使用下一个模块: - name: Export dashboard grafana_dashboard: graf
我按照本指南 link安装 kubernetes 集群,我没有错误,但我无法访问 kubernetes-Dashboard 我做了kubectl create -f https://rawgit.co
我们现在正在使用 Apache JMeter 3.1,并且对新功能 Dashboard 生成非常感兴趣。我们可以使用“-g”选项生成它并且它工作正常。 但我们也有兴趣自定义仪表板。例如: 从第一页删除
我是 wordpress 的新手,对某些东西有点困惑。我正在尝试为自己建立一个分类市场类型的网站。我不是为“客户” build 这个。由于我的编码技能达不到标准,我可能会使用几个不同的插件。最终,我希
是否可以有一个受限的 Kubernetes 仪表板?这个想法是让一个 pod 在集群中运行 kubectl proxy(受基本 HTTP 身份验证保护)以快速了解状态: pod 的日志输出 运行服务和
有人可以解释一下如何用 cocoa 读取(或至少下载为 XML 格式)吗?我就这样试过了。这可能是完全错误的:)。 NSMutableURLRequest* request = [[NSMutable
我想将我自己的部分添加到 umbraco 仪表板,以便我可以将我自己的管理部分集成到现有的登录/管理结构中。如果不编辑和重新编译 umbraco 源代码本身,这可能吗?是否推荐?如果是这样,是否有人有
我正在尝试使用配置文件访问 kubernetes 仪表板。从我选择配置文件时的身份验证中,它给出了‘ Not enough data to create auth info structure .’但
我是一名优秀的程序员,十分优秀!