d3.js 仅加载部分数据/同步数据

2024-04-14

我有很多数据,我将它们绘制为堆叠条形图。我的测试数据大约有 500k JSON 对象(= 50k 行,有 10 个堆叠段)。

我的问题是我不知道如何仅加载部分数据。它显示在浏览器中,因此宽度约为 1200 到 1920 像素。 我正在使用比例来计算线条大小。但是,如果我将窗口宽度设置为比数据大小更小的值,则 d3.js 会将每行的宽度计算为 0,这意味着不会显示任何内容。 所以,我必须设置 50k 的宽度来显示所有内容,但这有点不切实际 - 它会让浏览器崩溃,只有当我使用大约 10k 的数据然后设置宽度10k 像素。第二件事是渲染确实需要很长时间(5秒)。

1.) 我如何才能获取该数据并将其显示在宽度 = 1920 的窗口中,并且 - 如果我移动箭头键或概览图表 - 加载其他数据?

2.) 如何同步数据?例如:如果我有一个长滑块,则该滑块应该确定我感兴趣的数据。所以,范围是从 0 到 50k,然后我滑动它并在 ~4000 处。我想跳到图表中的那个位置。

   dataset = data;
    var stack = d3.layout.stack();
    stack(dataset);

    var x= d3.scale.ordinal()
            .domain(d3.range(dataset[0].length))
            .rangeRoundBands([0, w]);

    var y= d3.scale.linear()
            .domain([0, 1])
            .range([0, h]);

    var svg = d3.select("body")
            .append("svg")
            .attr("width", w)
            .attr("height", h);

    var groups = svg.selectAll("g")
                    .data(dataset)
                    .enter()
                    .append("g");

    var rects = groups.selectAll("rect")
                    .data(function (d) {
                        return d;
                    })
                    .enter()
                    .append("rect")
                    .attr("x", function (d, i) {
                        return x(i);
                    })
                    .attr("y", function (d) {
                        return y(d.y0 + d.y);
                    })
                    .attr("height", function (d) {
                        return h - y(d.y0);
                    })
                    .attr("width", x.rangeBand())
                    .attr("fill", function (d, i) {
                        return color(i);
                    });

您可以使用slice https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/slice方法对数据进行子集化。这不会减少数据loaded。但为您提供了一种方法来减少一次在图表上绘制的条形数量。

data = all_data.slice(start_index, end_index);

然后设置start_index and end_index基于您想要显示的数据。您可以添加一个事件侦听器,回调函数会更改该事件侦听器的开始索引和结束索引。

var refresh(){
    data = all_data.splice(start_index, end_index)
    //your code to redraw the graph using updated indices goes here
}

d3.select("body")
    .on("keydown", function() {
        if(d3.event.keyCode == 37){
            //left key press
            start_index = start_index - 4000;
            end_index = end_index-4000;
            if (start_index < 0){
                //handle boundary case
                start_index = 0;
                end_index = 4000;
            }
            refresh();
        }
        else if(d3.event.keyCode == 39){
            //right key press
            start_index = start_index + 4000;
            end_index = end_index + 4000;
            if (end_index > all_data.length){
                start_index = all_data.length-4000;
                end_index = all_data.length;
            }
            refresh();
        }
    });
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

d3.js 仅加载部分数据/同步数据 的相关文章

  • 将 jquery-mobile 与 Webpack 结合使用

    我正在尝试使用 webpack 加载 jquery mobile 但到目前为止还没有运气 我知道 jquery mobile 依赖于 jquery ui 而 jquery ui 又依赖于 jquery 如何在 Webpack 中设置这样的场
  • 将 Sweet Alert 弹出窗口添加到 React 组件中的按钮

    我为 Bootstrap 和 React 找到了这个完美的 Sweet Alert 模块 我在 Meteor 应用程序中使用它 http djorg83 github io react bootstrap sweetalert http d
  • ElectronJS ReferenceError:导航器未定义

    我正在尝试在电子上制作自定义标题栏 但是当我启动我的应用程序时 我遇到了 ReferenceError 导航器未定义 问题 请帮忙 这是我的 main js 中的代码片段 My Codes https i stack imgur com c
  • HTML colorpicker 发生变化时如何获取新值?

    我正在开发一个需要更改 HTML 颜色的网络应用程序canvas基于的价值观colorpicker 我有一个colorpicker在我需要获取的 HTML 中value从每次更新开始
  • 使用 jquery 将字符串数组转换为整数

    我正在尝试将 jquery 中的字符串数组转换为整数数组 这是我的尝试 var cdata data values split each cdata function i l l parseInt l 我认为在这种情况下你不需要使用 Jqu
  • 如何从顺序键盘导航中删除 Vuetify 附加图标

    在带有 Vuetify 的 Vue js 应用程序中 我有一组用v text field并且其中有一个append icon为了切换文本可见性 如下所示
  • 将杂散文本包裹在 div 中

    如何选择 任何没有包含标签的内容 来在 jQuery 中添加包装器 前任 div class post div class whatever This should remain untouched div I want to wrap t
  • 如何在jQuery datetimepicker中获取UTC时间

    我正在使用尝试这个jQuery 日期时间选择器 http trentrichardson com examples timepicker 获取日期和时间数据 我能够得到大部分内容 格式 显示等 但是 我无法获取 UTC 格式的日期和时间 我
  • React无限滚动scrollableTarget动态获取id?

    我在我的项目中使用react infinite scroll component 如何让scrollableTarget动态获取item id 我试过这样scrollableTarget item id 但它不起作用 必须与该 div 具有
  • 根据用户输入使用 Jquery 显示/隐藏字段

    li class numeric optional li
  • jquery:当我在文档上附加一层时,如何重置文档滚动条?

    当我在文档上附加图层时 如何重置文档滚动条 例如 它就像 Facebook 页面 当您有一个很长的文档时 您需要向下滚动才能查看较旧的图像 帖子 当你点击照片时 滚动条发生了变化 从顶部开始 但文档页面根本不跳转 当关闭照片查看器图层时 滚
  • 如何使 jQuery 向上动画

    我有一些 jquery 运行得相当好 但是当我将鼠标悬停在有问题的元素上时 底部向下扩展 这并不意外 但不是所需的效果 我希望元素的底部保持静止 而元素的顶部向上扩展 如果您想查看我目前拥有的内容 您可以导航至http demo ivann
  • window.showModalDialog 的等效跨浏览器解决方案是什么?

    window showModalDialog 的等效跨浏览器解决方案有哪些 showModalDialog 在 IE 和 FF 3 中引入 我个人认为没有 但是有很多 UI 工具包提供了这样的功能 例如jQuery UI http jque
  • 从多维无穷大数组中删除数组元素

    我想删除一个特定元素 例如 我想删除元素id 76在下面的数组中 而且 数组可以无限地组合在一起 这里的问题是我无法刷新页面 因为我使用 Vue js 进行即时操作 如果我能做到这一点 我的下一个问题可能是如何在我现在想要的地方添加一个元素
  • 需要js、d3 和 nvd3 集成

    我面临整合的问题要求 questions tagged requirejs with d3 questions tagged d3 and nvd3 questions tagged nvd3 我找到了一个使用 require 的简单解决方
  • 替换两个引号之间的字符串

    我想转动一根绳子str hello my name is michael what s your s into hello my name is span class name michael span 我怎样才能在 JavaScript
  • 在javascript中动态生成行?

    我是 javascript 新手 我想在按下 Tab 时动态生成行 并希望获取在动态生成的行中输入的值 以便我可以在 servlet 代码中使用这些值 这是我的html
  • Django 与谷歌图表

    我试图让谷歌图表显示在我的页面上 但我不知道如何将值从 django 视图传递到 javascript 以便我可以绘制图表 姜戈代码 array Year Sales Expenses 2004 1000 400 2005 1170 460
  • 我可以使用 jQuery 动态创建文件(及其内容)吗? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 这是我的 HTML 代码 ul li
  • 在 javascript 中使用 xPath 解析具有默认命名空间的 XML

    我需要创建一个 XML xPath 解析器 所有解析都必须在客户端进行 使用 JavaScript 我创建了一个 javascript 来执行此操作 在默认名称空间发挥作用之前 一切看起来都正常 我根本无法查询具有默认命名空间的 XML 我

随机推荐

  • SHTML 的目的和独特性是什么?

    最近 当我看到一个带有 shtml 扩展名的网站时 我开始了解 SHTML SHTML 的目的是什么 它与 HTML 和 DHTML 有何不同 SHTML 是一种文件扩展名 可让 Web 服务器知道应使用服务器端包含 SSI 来处理该文件
  • 我可以使用 adb shell 向我的应用程序发送命令吗

    我想找到一种方法来创建可以使用 adb shell 或类似命令发送到我的应用程序的命令 这样我就可以对程序进行一些小的更改 而不必每次更改任何内容时都重新加载应用程序 有没有办法打开 adb shell 并向正在运行的应用程序发送命令 如果
  • WCF回调接口-谁关闭通道

    我在关闭回调 双工通信通道时遇到问题 疑问 这是我的原型 WCF 接口 ServiceContract CallbackContract typeof IMyInterfaceCallback public interface IMyInt
  • 如何使用 rhino 导入其他 javascript 文件

    我一生都无法弄清楚如何在Rhino下的javascript中导入javascript文件 基本上 我想做的就是导入 some file js 并能够使用其中范围内的内容 我一直在尝试弄乱 Context currentContext com
  • Egit - 创建分支时正确设置远程跟踪

    当我使用 EGit 从远程分支创建新分支时 我得到了错误的远程跟踪设置 我从远程分支 refs heads master 创建本地分支 feature1 并立即推送到上游 在我的 git config 文件中配置以下远程跟踪 branch
  • 如何重置对模拟类方法的期望?

    抱歉 如果这很简单 我对 ruby 和 rspec 都是新手 似乎 rspec 是一个非常 晦涩 的世界 特别是来自 net 背景时 在我的 规范 中 我有 before each do expect File to receive exi
  • 将包含无效字符的嵌套字段从 Spark 2 导出到 Parquet [重复]

    这个问题在这里已经有答案了 我正在尝试使用 Spark 2 0 2 将 JSON 文件转换为镶木地板 JSON 文件来自外部源 因此架构在到达之前无法更改 该文件包含属性映射 在我收到文件之前 属性名称是未知的 属性名称包含不能在 parq
  • 树视图虚拟化

    我们正在尝试找到一种虚拟化的好方法TreeView 数据并不是真正的问题 因为它非常轻 每个项目大约 16 字节 问题是我们可能有数以万计的数据 尽管实际数据只占用 160 kb 内存 但树视图项目确实使用更多的内存 我们现在已经尝试使用
  • 如果 Address 嵌套在 User 中,为什么我必须保留这两个对象?

    我想更好地熟悉 JPA 所以我创建了一个非常简单的项目 我有一个用户类和一个地址类 看来我必须坚持两者 即使我将地址添加到我的用户类中 User import javax persistence import java util HashS
  • 严重:Web 应用程序 [/restapp] 中的 Servlet [Jersey Web Application] 引发了 load() 异常

    这是我的 REST API 项目 我不知道这个错误是什么 我正在尝试从两天开始解决这个错误 现在我已经筋疲力尽了 有人可以帮助我吗 网页正在加载 但控制台中显示此错误 SEVERE Servlet Jersey Web Applicatio
  • Bazaar 上的 SSH 权限被拒绝

    我是芭莎的新手 我正在尝试设置我的 SSH 密钥 但我总是收到 没有权限 以下是我所做的事情 打开 PuTTYgen 点击 生成 围绕鼠标指针移动 添加密码 密码 点击 保存公钥 保存公钥 点击 保存私钥 保存私钥 Private Key
  • 将案例类转换为另一个递归结构的相同案例类

    我正在尝试使用 Shapeless 来转换案例类 如下所示 case class A int Int str String case class B a A str String case class AnotherA int Int st
  • ffmpeg流rc缓冲区下溢

    目前我正在使用开源工具 ffmpeg ffserver 建立一个屏幕共享平台 分享之初一切都很好 大约 1 1 2 分钟后 我在输出中得到以下异常 flv 0x3a47aa0 rc buffer underflow flv 0x3a47aa
  • 自定义模块未显示在应用程序列表中

    我正在尝试将模块从 odoo 8 安装到 odoo 9 我刚刚将整个文件夹复制到addonsodoo 9 中的文件夹并希望我能以某种方式installodoo 9 中的模块 但它没有显示在要安装的应用程序列表中 odoo 的结构是否有任何变
  • 如何在 swi-prolog 的 prolog 文件中运行 prolog 查询?

    如果我有一个定义规则的 prolog 文件 并在 Windows 中的 prolog 终端中打开它 它会加载事实 然而 然后它显示 提示我手动输入一些内容 如何将代码添加到文件中 以便它实际上会评估这些特定的语句 就像我输入它们一样 像这样
  • 两种表结构的区别

    我对这两种结构很困惑 这两个表各有什么优缺点 哪一个更好 为什么 TABLE1 反模式 在常见情况下 第二个表是反模式在数据库设计的背景下 而且 更重要的是 它有特定的名称 实体 属性 值 EAV 在某些情况下 使用这种设计是合理的 但这种
  • css显示表格单元格需要百分比宽度

    我已经处于需要对 div 元素使用 display table cell 命令的位置 但是我发现只有在宽度上添加百分比时 单元格 才能正常工作 在这个小提琴中http jsfiddle net NvTdw http jsfiddle net
  • 为什么变量在重写时的行为与方法不同? [复制]

    这个问题在这里已经有答案了 一般来说 重写是在子类中重新定义成员含义的概念 为什么在java中重写时变量的行为不像方法 例如 class Base int a 10 void display System out println Insid
  • 从 iOS 应用程序在 Facebook 页面上发帖未显示在页面上?

    我正在 Facebook 页面上发布图片和虚拟文本 页面 ID 为 848190045198980 我正在使用我的 Facebook 凭据登录 而且我对特定页面具有管理员角色 所以我只是从 Facebook 获得基本权限 以下是请求和响应
  • d3.js 仅加载部分数据/同步数据

    我有很多数据 我将它们绘制为堆叠条形图 我的测试数据大约有 500k JSON 对象 50k 行 有 10 个堆叠段 我的问题是我不知道如何仅加载部分数据 它显示在浏览器中 因此宽度约为 1200 到 1920 像素 我正在使用比例来计算线