d3.js 构建矩形网格

2023-11-22

我正在尝试在 d3.js 中构建一个矩形网格。

网格有 7 行(一周中的几天)和 24 列(一天中的小时)。

以下代码仅绘制(行:列): 天0:小时0, 第 1 天:1 小时, 第 2 天:第 2 小时, 第 3 天:第 3 小时, 第 4 天:第 4 小时, 第 5 天:5 小时, 第 6 天:第 6 个小时, 第 7 天:7 小时

问题:您知道为什么以下代码不起作用吗?

/**
*   calendarWeekHour    Setup a week-hour grid: 
*                           7 Rows (days), 24 Columns (hours)
*   @param id           div id tag starting with #
*   @param width        width of the grid in pixels
*   @param height       height of the grid in pixels
*   @param square       true/false if you want the height to 
*                           match the (calculated first) width
*/
function calendarWeekHour(id, width, height, square)
{
    var calData = randomData(width, height, square);
    var grid = d3.select(id).append("svg")
                    .attr("width", width)
                    .attr("height", height)
                    .attr("class", "chart");

        grid.selectAll("rect")
              .data(calData)
                .enter().append("svg:rect")
                 .attr("x", function(d, i) { return d[i].x; })
                 .attr("y", function(d, i) { return d[i].y; })
                 .attr("width", function(d, i) { return d[i].width; })
                 .attr("height", function(d, i) { return d[i].height; })
                 .on('mouseover', function() {
                    d3.select(this)
                        .style('fill', '#0F0');
                 })
                 .on('mouseout', function() {
                    d3.select(this)
                        .style('fill', '#FFF');
                 })
                 .on('click', function() {
                    console.log(d3.select(this));
                 })
                 .style("fill", '#FFF')
                 .style("stroke", '#555');
}

////////////////////////////////////////////////////////////////////////

/**
*   randomData()        returns an array: [
                                            [{id:value, ...}],
                                            [{id:value, ...}],
                                            [...],...,
                                            ];
                        ~ [
                            [hour1, hour2, hour3, ...],
                            [hour1, hour2, hour3, ...]
                          ]

*/
function randomData(gridWidth, gridHeight, square)
{
    var data = new Array();
    var gridItemWidth = gridWidth / 24;
    var gridItemHeight = (square) ? gridItemWidth : gridHeight / 7;
    var startX = gridItemWidth / 2;
    var startY = gridItemHeight / 2;
    var stepX = gridItemWidth;
    var stepY = gridItemHeight;
    var xpos = startX;
    var ypos = startY;
    var newValue = 0;
    var count = 0;

    for (var index_a = 0; index_a < 7; index_a++)
    {
        data.push(new Array());
        for (var index_b = 0; index_b < 24; index_b++)
        {
            newValue = Math.round(Math.random() * (100 - 1) + 1);
            data[index_a].push({ 
                                time: index_b, 
                                value: newValue,
                                width: gridItemWidth,
                                height: gridItemHeight,
                                x: xpos,
                                y: ypos,
                                count: count
                            });
            xpos += stepX;
            count += 1;
        }
        xpos = startX;
        ypos += stepY;
    }
    return data;
}

问题是您的数据绑定仅迭代数组的第一个维度 (0,1,2),而您尝试使用它迭代第二个维度 (0,0)(0,1)(0,2) ) 导致 (0,0)(1,1)(2,2) 行为。

要获得您想要的结果,只需使用子选择即可。从行定义开始:

var row = chart.selectAll(".row") 
    .data(data) // each row will be bound to the array at data[i]
  .enter().append("div") 
    .attr("class", "row") 
    … 

然后使用恒等函数(作为数据属性)来取消引用 每行的单元格:

var cell = row.selectAll(".cell") 
    .data(function(d) { return d; }) // then iterate through data[i] for each cell
  .enter().append("div") 
    .attr("class", "cell") 
    … 

您可以在以下位置查看完整源代码的工作示例http://bl.ocks.org/2605010.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

d3.js 构建矩形网格 的相关文章

  • 使用什么比例仅在 d3 js 中的 x 轴上表示年份

    我一直在 D3 Js 中开发年份 x 轴 与收入 y 轴 的面积图 数据如下 localData Revenue 4 5 Year 2011 Revenue 5 5 Year 2010 Revenue 7 0 Year 2012 Reven
  • 将json解析为条形图d3js

    我正在尝试使用 json url 创建条形图 关于印象和时间 我认为我没有正确引用 data data 中的数据 如何从 d3 中的 json 文件访问印象字段 var url https script google com macros
  • 使 D3 响应式:viewBox 与 resize()?

    我必须构建在平板电脑 桌面显示器以及某些情况下非常大的 4k 高分辨率影院尺寸显示器上都能正常运行的 d3 可视化效果 因此 我试图找出使用 SVG 的 viewBox 属性和 preserveaspectratio 与调用调整大小函数以在
  • D3 js 链接在节点下面

    我创建了图形对象 稍后可以使用更多节点和链接来扩展图形对象 第一个创作看起来不错 然后 与add函数我添加了节点 4 和链接 as you can see above the link of between node 4 and 3 is
  • Javascript 将对象推送为克隆

    我将 d3 用于交互式网络应用程序 我需要绑定的数据在交互过程中发生变化 并且由 JSON 变量中的一些选定对象组成 为此 我在 JSON 变量上使用了映射 并进行了一些查询来选择适当的对象 对象被推送到列表中 并且该列表被绑定为新数据 我
  • D3 强制布局,较大的节点聚集在中心

    我一直在修改将用于标签云的强制布局 每个标签都由一个
  • d3js 折线图——如何将最后一步延伸到范围末尾?

    很简单 但我无法摆脱这个问题 线是两点 值 之间的链接 从值 A 绘制到值 B 因此 假设 A 的值为 10 B 的值为 20 而 C 缺失 现在从 0 到 10 到 20 的线已经绘制完毕 我想画从 0 到 10 到 20 到 25 的线
  • D3 时间解析返回 null

    根据此页面上的说明 https github com mbostock d3 wiki Time Formatting https github com mbostock d3 wiki Time Formatting我正在尝试解析 ISO
  • d3 饼图中的文本被路径覆盖

    我正在尝试按照 d3 的饼图示例进行操作http bl ocks org mbostock 3887235 http bl ocks org mbostock 3887235 我的代码的最小示例 const container graph
  • LeafletJs只显示一个国家

    我使用 Leafletjs 和 D3 来显示地图 我只想在地图上显示英国 Leaflet和D3是否可以只显示英国 这当然是可能的 现在的解决方案取决于您是想使用 D3 绘制英国 还是想从 Tile Server 获取它 在后一种情况下 有一
  • 创建链接到 csv 文件的表

    我正在尝试创建一个链接到的表 csv使用 d3 文件 但我得到的只是一个空白网页 即使以克里米亚为例 我也得到一张空白页 我将很高兴得到指导或展示一个可行的例子或关于我做错了什么的建议 如果您询问如何从 CSV 数据创建 HTML 表 这就
  • 使用 classed("active",true) 鼠标悬停时 D3 颜色变化

    我是 js 和 D3 的新手 我已经生成了某种热图 并且想使用 D3 的 on mouseover 更改图块的颜色 我可以显式更改颜色 但想使用 CSS 活动规则 可能是一些简单的东西可以修复 任何帮助将不胜感激 完整代码如下 Thanks
  • 在 X 轴刻度上渲染 HTML

    我想在 D3 图表的 x 轴上渲染 HTML 基本上 我希望轴上的每个标签都是到数据中另一列的超链接 我试过了 x domain data map function d return a href d Name a 但它根本不起作用 我得到
  • 设置 D3 力定向图

    致尊敬的读者 我对 javascript 相当陌生 我也遇到过这个问题 我正在尝试实现这个力导向图的修改版本 http mbostock github com d3 ex force html http mbostock github co
  • SVG 文本在 IE 中消失,直到我单击它

    我在 Internet Explorer Edge 以 Win7 上的为准 中遇到与 SVG 创建和操作相关的问题 在我正在开发的应用程序中 我们使用 d3 生成 SVG 形式的图形 在 Chrome 和 Firefox 中 它们工作得很好
  • 窗口调整大小事件上的响应式画布

    我是画布概念的新手 我正在尝试使用 D3 js 绘制画布 我想让画布根据窗口屏幕大小进行响应 function onResize var element document getElementsByTagName canvas 0 var
  • crossfilter - 计算具有属性的所有记录的百分比

    这是我的问题 我正在使用 python Flask 服务器从 mongo db 获取 json 数据 并在其中指定要导入的字段 此数据采用 json 格式 并且仅像这样获取 一旦通过 graphs js 中的 crossfilter 是否可
  • 如何在 React 组件中使用 CDN

    我正在尝试使用基于 D3 构建的库 称为 Greuler 来动态渲染图形 它的 npm 包似乎已损坏 当我改用 Greuler CDN 时 index html 中的测试图终于起作用了 但是 我正在开发一个 React 应用程序 并且我希望
  • d3js v5 + Topojson v3 关于加入 csv 和 json 的优化

    为了制作地图 我需要将一些值从 csv 导入到 json直接在代码中 为了加载 json 和 csv 文件 我使用 Promise 对象的异步操作 并使用两个循环和一个公共键在 json 文件上添加新属性 for var i 0 i lt
  • 如何部分或仅按百分比沿路径过渡

    我是 d3 的初学者 目前无法使用最新版本 但我使用的是 3 x 版本 我想要实现的应该很简单 但遗憾的是我没有找到有关如何做到这一点的资源 目标是在我的 svg 中显示一条路径 然后我想显示例如一个圆并沿着路径过渡 移动 追踪圆 如果我想

随机推荐

  • Visual Studio 2010“按任意键继续...”不显示[关闭]

    很难说出这里问的是什么 这个问题模棱两可 含糊不清 不完整 过于宽泛或言辞激烈 无法以目前的形式合理回答 如需帮助澄清此问题以便重新打开 访问帮助中心 当我的应用程序完成执行时 按任意键继续 字样不会显示在控制台中 我知道这个提示应该在 启
  • 聚合匹配的项目在 mongodb 中不起作用

    我正在尝试根据某些匹配条件获取数据 首先我尝试过这个 这里的ending date是完整的日期格式 Offer aggregate match carer id req params carer id status 3 group id y
  • JavaScript 按钮重定向

    试图让我的按钮充当链接 尝试过 a 标签 如果您在新选项卡中打开它会起作用 但如果您单击它则不起作用 然后尝试了这段代码 但什么也没有 建议 a
  • Angular-cli 资产优化中的“JavaScript 堆内存不足”

    我正在 Angular cli 项目中创建传单地图 地图图块本地存储在 assets 文件夹中 因为它是栅格地图 问题是 当我有很多地图缩放级别时 我有超过 28 万张图像 大小大约为 1 1 GB 而且它会变得更大 当我使用ng serv
  • 如何在 Java 中查找给定服务器的 DNS MX 记录?

    有人知道如何使用标准库在java中获取MX地址 例如来自gmail com 吗 或者我需要下载外部的吗 我正在使用 netbeans 如果它有帮助的话 如果它为此提供了一些东西 我也在java中为此寻找标准库 不成功 然后我用过dnsjav
  • 获取浏览器中的快捷键组合

    我想制作一个页面 其中某些输入和链接附加有访问键 并且我想通知用户需要按什么组合键来激活输入或链接 有没有办法通过JavaScript自动获取浏览器的accesskey组合键 或者我是否需要检测它是哪个浏览器 然后只使用一个存储浏览器使用的
  • 如何在 vim 中用 & 符号替换?

    正如标题所说 我想用与号 替换 制表符 I use s t g 当然这是行不通的 我在 mac os x 上使用 vim 如果这有影响的话 谢谢 您确定问题出在 符号上吗 我收到了更多关于该标签的投诉 别忘了逃避它 s t g
  • 求大 n 和 k 模 m 的二项式系数

    我想计算 nCk mod m 具有以下约束 n k m 10 9 7 我读过这篇文章 但这里 m 的值为 1009 因此 使用卢卡斯定理 我们只需要计算 1009 1009 个不同的 aCb 值 其中 a b 如何在上述限制下做到这一点 我
  • Ext JS 点击事件

    我有以下事件 Ext onReady function Ext select gallery item img on click function e Ext select gallery item removeClass gallery
  • 引擎“节点”与此模块不兼容。预期版本“12.x”。得到“14.8.0”

    我尝试做一个yarn add 但我有这个错误 The engine node is incompatible with this module Expected version 12 x Got 14 8 0 运行这些命令 sudo npm
  • 处于调试视图,程序终止后,切换回 Eclipse 中的 Java 视图

    我正在寻找一种在我正在调试的应用程序结束后返回到 Eclipse 中的标准 Java 视图的方法 有可能做到这一点吗 这是其他一些 IDE 例如 Visual Studio 中的默认行为 我更愿意这样做 必须再次手动将视图切换到初始视图 这
  • 在 OSX 上安装 Typesafe 激活器

    我正在尝试安装类型安全激活器 scala AKKA play 框架 激活器 我有优胜美地 OSX 我的 bash 是 Oh my ZSH 我已经安装并导出了 JDK 1 7 我下载并解压了文件 typesafe activator 1 2
  • 多维数组上的 json_encode() - 使用字符串键

    我正在使用 PHP 创建一个非常大的多维数组 每个对象包含名称 ID ParentID 和 Children Children 是具有相同格式的更多对象的数组 命名每个对象的 ID 至关重要 这有助于我将每个对象置于正确的父对象下 在下面的
  • Matlab 的 Demcmap 的 Python 等效项(海拔 +/- 适当的颜色图)

    我正在寻找一种方法来获得适当的海拔颜色图matplotlib 的cmap terrain 看起来很棒 但颜色缩放不是基于零 即 如果比例为 0 gt 5000m 则 0 gt 1000m 范围可能是蓝色阴影 您会认为这是海平面以下的情况 f
  • 如何使表格单元格的背景透明

    我正在为我的 所有用户 页面创建一个表 第一个表分为两部分 广告和用户 在 用户 表内 tr td td tr 我为每个用户的数据创建了另一个表以通过 php 显示 这是图片 http postimg org image 3mbeyb411
  • c中的“short int”和“short”有什么区别? [复制]

    这个问题在这里已经有答案了 将变量声明为short int 和short 有什么区别 在gcc编译器中 short占用2个字节 用sizeof short 检查 并且short int也给出了2个字节的大小 两者是否相同或不同 在这种情况下
  • 如何在 JavaScript 中获取 HTML 元素的样式值?

    我正在寻找一种方法 从通过样式标签设置样式的元素中检索样式 在身体里 div div 我正在寻找不使用库的直接 JavaScript 我尝试了以下操作 但一直收到空白 alert document getElementById box st
  • 如何从子例程中不返回任何内容?

    我想在执行下一步之前验证一个条件 但只发出警告并跳过当前值而不是死掉 如何重写 validate me 子例程而不返回任何值 Update 请注意 以下代码按预期工作 只是我想要其他东西 而不是从 validate me 返回 1 或 0
  • 保存图像,然后在 Swift (iOS) 中加载它

    我正在使用 saveImage 保存图像 func saveImage image UIImage path String gt Bool let pngImageData UIImagePNGRepresentation image le
  • d3.js 构建矩形网格

    我正在尝试在 d3 js 中构建一个矩形网格 网格有 7 行 一周中的几天 和 24 列 一天中的小时 以下代码仅绘制 行 列 天0 小时0 第 1 天 1 小时 第 2 天 第 2 小时 第 3 天 第 3 小时 第 4 天 第 4 小时