javascript - 使用来自实时 Firebase 的数据在 js 中使用 d3 的实时条形图
问题描述
我是 javascript 的新手,并且在 2 周的大部分时间里一直被困在一个问题上。我正在尝试使用来自 Firebase 的数据制作一个实时更新的条形图。我的数据库的结构是:
标题:
------- child1 -------child2
-------child3
-------
child4 Firebase
的数据是从 python 提供的运行良好的脚本,每 10 秒更新一次标题的每个子项。我制作了一个通过随机数生成自动更新的条形图。
//Return array of 10 random numbers
var randArray = function() {
for(var i = 0, array = new Array(); i<10; i++) {
array.push(Math.floor(Math.random()*10 + 1))
}
return array
}
var initRandArray = randArray();
var newArray;
var w = 500;
var h = 200;
var barPadding = 1;
var mAx = d3.max(initRandArray)
var yScale = d3.scale.linear()
.domain([0, mAx])
.range([0, h])
var svg = d3.select("section")
.append("svg")
.attr("width", w)
.attr("height", h)
svg.selectAll("rect")
.data(initRandArray)
.enter()
.append("rect")
.attr("x", function(d,i) {return i*(w/initRandArray.length)})
.attr("y", function(d) {return h - yScale(d)})
.attr("width", w / initRandArray.length - barPadding)
.attr("height", function(d){return yScale(d)})
.attr("fill", function(d) {
return "rgb(136, 196, " + (d * 100) + ")";
});
svg.selectAll("text")
.data(initRandArray)
.enter()
.append("text")
.text(function(d){return d})
.attr("x", function(d, i){return (i*(w/initRandArray.length) + 20)})
.attr("y", function(d) {return h - yScale(d) + 15})
.attr("font-family", "sans-serif")
.attr("fill", "white")
setInterval(function() {
newArray = randArray();
var rects = svg.selectAll("rect")
rects.data(newArray)
.enter()
.append("rect")
rects.transition()
.ease("cubic-in-out")
.duration(2000)
.attr("x", function(d,i) {return i*(w/newArray.length)})
.attr("y", function(d) {return h - yScale(d)})
.attr("width", w / newArray.length - barPadding)
.attr("height", function(d){return yScale(d)})
.attr("fill", function(d) {
return "rgb(136, 196, " + (d * 100) + ")";
});
var labels = svg.selectAll("text")
labels.data(newArray)
.enter()
.append("text")
labels.transition()
.ease("cubic-in-out")
.duration(2000)
.text(function(d){return d})
.attr("x", function(d, i){return (i*(w/newArray.length) + 20)})
.attr("y", function(d) {return h - yScale(d) + 15})
.attr("font-family", "sans-serif")
.attr("fill", "white")
}, 3000)
我需要使用来自 firebase 的数据更新图表。我已经知道如何使用快照将 firebase 连接到 js,并且已经尝试过但无济于事。此外,在图表样式方面需要一些帮助。请如果有人知道我怎么能完成这个(它的时间敏感)。这是 jsfiddle 中的代码链接:Live bar chart d3
谢谢
解决方案
推荐阅读
- scala - 如何创建参数化函数来检查不同类型的值
- java - 如何确定我的目标 SDK 需要哪个 Android Gradle 插件版本?
- reactjs - Apexcharts 安装到现有 React 项目后无法正常工作
- node.js - NPM project.json 脚本部分任务未正确执行
- javascript - 将特定于视图的 JavaScript 添加到 Asp.Net Core 2 MVC 应用程序的首选方法是什么?
- istio - 在 Istio 中显示非子集端点是正常行为吗
- swift - firebase firebase 快照作为自定义模型
- ruby-on-rails - 我的 Rails 应用程序中的字体来自哪里
- python - SystemML:无法导入子模块 mllearn(因此无法导入 Keras2DML 函数)
- ios - UITabbar 在 iOS 10 但不是 11+