D3.js - 如何迭代数据集中的子数组

2024-04-27

我试图让 d3 迭代数据中的子数组并生成多个饼图。

这是完整的代码(来自https://gist.github.com/mbostock/1305111 https://gist.github.com/mbostock/1305111 and https://gist.github.com/enjalot/1203641 https://gist.github.com/enjalot/1203641):

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <title>D3 Page Test</title>
        <script type="text/javascript" src="http://mbostock.github.com/d3/d3.js"></script>
 <style type="text/css">

body {
  text-align: center;
}

    </style>
  </head>
  <body>
    <script type="text/javascript">

// Define the data as a two-dimensional array of numbers. If you had other
// data to associate with each number, replace each number with an object, e.g.,
// `{key: "value"}`.
var datad = [
  {s:[ 20,  1, 1], l:[10,100]},
  {s:[ 1, 20, 1], l:[ 20, 200]},
  {s:[ 1, 1, 20], l:[ 30,300 ]}
];

// Define the margin, radius, and color scale. The color scale will be
// assigned by index, but if you define your data using objects, you could pass
// in a named field from the data object instead, such as `d.name`. Colors
// are assigned lazily, so if you want deterministic behavior, define a domain
// for the color scale.
var m = 10,
    r = 100,
    z = d3.scale.category20c();

// Insert an svg:svg element (with margin) for each row in our dataset. A
// child svg:g element translates the origin to the pie center.
var svg = d3.select("body").selectAll("svg")
    .data([datad])
  .enter().append("svg:svg")
    .attr("width", (r + m) * 2)
    .attr("height", (r + m) * 2)
  .append("svg:g")
    .attr("transform", "translate(" + (r + m) + "," + (r + m) + ")");

 var pie = d3.layout.pie()           //this will create arc data for us given a list of values
        .value(function(d, i) { return d.s[i]; });    //we must tell it out to access the value of each element in our data array


// The data for each svg:svg element is a row of numbers (an array). We pass
// that to d3.layout.pie to compute the angles for each arc. These start and end
// angles are passed to d3.svg.arc to draw arcs! Note that the arc radius is
// specified on the arc, not the layout.
svg.selectAll("path")
    .data(pie)
  .enter().append("svg:path")
    .attr("d", d3.svg.arc()
    .innerRadius(0)
    .outerRadius(r + 2))
    .style("fill", function(d, i) { return z(i); });

    </script>
  </body>
</html>

我得到一个饼图,它由数据集中每个“s”数组中的“20”值组成。

第一个饼图是从 data[0][0] 中绘制的,第二个饼图是从 dated[1][1] 中绘制的,第三个饼图是从 datad[2][2] 中绘制的。

我期待三个饼图(数据中的每个“s”数组一个)。

我认为我的问题在于:

     var pie = d3.layout.pie()  //this will create arc data for us given a list of values
        .value(function(d, i) { return d.s[i]; });  //we must tell it out to access the value of each element in our data array

我如何告诉它迭代每个 s 数组,而不是同时迭代 datad 和 s 数组。也就是说,我想迭代 datad[0]s[0], datad[0]s[1], datad[0]s[2] ... datad[2]s[0], datad[2]s [1](等)而不是 datad[0]s[0]、datad[1]s[1]、datad[2]s[2]

提示或指示表示赞赏!

编辑:这是小提琴:jsfiddle.net/H2SKt/701/


这里出现了一些问题,所有这些问题加在一起就得到了一个漂亮的饼图,但它不是您想要绘制的图表。

对于初学者来说,当您将数据连接到 svg 选择时:

var svg = d3.select("body").selectAll("svg")
    .data([datad])

您将数据数组嵌套在一个新数组(方括号)中,其中数据数组是唯一元素。所以你只能得到一个<svg>从你的enter()声明,不是三个。将其更改为

var svg = d3.select("body").selectAll("svg")
    .data(datad)

你得到三个<svg>元素,如您所愿。但它们都没有饼图,因为您的饼图函数无法找到您告诉它要查找的数据值:

 var pie = d3.layout.pie()    
        .value(function(d, i) { return d.s[i]; });   

svg.selectAll("path")
    .data(pie)
  .enter().append("svg:path")

饼图函数期望传递一个array的数据,它会调用指定的value功能on each数组的元素。你告诉它数组的每个元素都有一个s属性是一个数组,它应该访问该数组中的元素。当您的饼函数传递整个原始数据数组时,这(在某种程度上)是有效的,但现在我们已经将原始数据数组分割成不同的 SVG 元素了。现在,pie 函数正在传递以下形式的数据对象{s:[ 1, 1, 20], l:[ 30,300 ]},并且不知道该怎么办。

因此,您需要更改两件事:您需要确保 pie 函数仅传递它应该使用的值数组,并且您需要告诉它如何访问该数组的每个元素中的值。除非您实际上不必执行第二部分,因为这些值只是原始数字并且默认值函数将起作用:

 var pie = d3.layout.pie() 
       // .value(function(d, i) { return d; });  //default, not required

svg.selectAll("path")
      .data( function(d) { return pie(d.s); })
  .enter().append("svg:path")

The d数据连接函数中的值是附加到每个的数据对象<svg>元素;匿名函数提取子数组并对其调用pie函数,以返回每个子数组的数据数组<path>该 SVG 中的元素。

工作小提琴:http://jsfiddle.net/H2SKt/706/ http://jsfiddle.net/H2SKt/706/

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

D3.js - 如何迭代数据集中的子数组 的相关文章

  • 避免 D3.js 中子节点重叠

    我正在使用 D3 js 构建一个树结构 显示 Facebook 用户和他 她的 Facebook 好友 根节点是用户 子节点是好友 我的 UI 中有固定宽度 问题是子节点将相互重叠 var nodes tree nodes root rev
  • 带水平滚动的 C3 / D3 条形图

    我正在创建一个 c3 条形图 其中每个条形代表在给定的一周内加入某个计划的人数 数据只是一个对象数组 其中包含 week of people week of people 等 理想情况下 我希望图表中显示最近 6 周的数据 但我希望能够水平
  • 如何在 d3 力定向图中突出显示(更改颜色)所有连接(邻居)节点和链接

    我在这里看到了这个例子http www d3noob org 2013 03 d3js force directed graph example basic html http www d3noob org 2013 03 d3js for
  • D3 树方向

    我正在使用 D3 树布局 类似于此jsfiddle https jsfiddle net vrkrympk 唯一的问题是我需要每个节点的方向从布局的左上角开始 而不是从顶部中心开始 var nodeUpdate node transitio
  • D3可折叠树不同节点颜色

    我在 d3 js 中有一个可折叠的树 我的目标是通过 类型 属性为节点着色 例如 类型 str 的节点应填充为红色 而类型 elem 的节点应填充为绿色 我就是无法让它发挥作用 有人能帮助我吗 这是我的代码
  • 从 csv 更新数据时,d3 在 setInterval 上闪烁文本

    我是 d3 的新人 学习了很多东西 我在更新从 csv 文件获取的数据时遇到了一些问题 我使用 setInterval 每秒更新数据 当它删除并再次插入数据时 它会闪烁几毫秒 表消失并生成新表 我究竟做错了什么 我怎样才能消除闪烁 感谢您的
  • 我可以为我的 r 闪亮界面使用 index.html 和 ui.r 吗?

    在参照this http shiny rstudio com articles html ui html关于如何完全用 HTML 构建闪亮的应用程序 我想知道是否有任何方法可以将这种方法与传统的 ui r 方法结合使用 Reason Thi
  • 调整小倍数迷你图

    我有一个热图 显示一些数据和热图每行的迷你图 如果用户单击行标签 则数据按降序排列 因此每个矩形都会放置在正确的位置 反之亦然 如果用户单击列标签 每个反应都以正确的方式放置 但我无法放置迷你图 这是代码 http plnkr co edi
  • 无法让 D3 .on('mouseover', ...) 工作

    我正在学习 D3 并尝试通过将鼠标悬停在 SVG 圆圈上来在散点图上显示数据信息 我从 csv 文件中获取数据 数据位于太阳系 包含行星名称 质量和半径 并且所有圆圈都正确显示 但是当我尝试在鼠标悬停时 console log 数据信息 例
  • D3.js - 如何迭代数据集中的子数组

    我试图让 d3 迭代数据中的子数组并生成多个饼图 这是完整的代码 来自https gist github com mbostock 1305111 https gist github com mbostock 1305111 and htt
  • 如何使用 jQuery 循环 JSON 文件

    我正在尝试循环下面的 JSON 文件 statements subject A predicate B object C subject D predicate E object F 正如您所看到的 有两个主语 两个谓语和两个宾语 例如 我
  • R/d3heatmap/shiny - 有没有办法在 d3 工具提示中嵌入图像?

    我想在滚动单元格时在 d3 工具提示中嵌入图像 而不是默认的行 列 值数据 library shiny library d3heatmap ui lt shinyUI fluidPage titlePanel Old Faithful Ge
  • 当节点扩展时增加d3中的连接链路长度

    我正在 d3 中研究可折叠力布局 我面临的问题是 当单击节点时 我需要增加节点之间链接的长度 以保持子节点之间的链接距离相同 当分析扩展时 如何增加分析和耀斑之间的距离 保持与子级的距离较小 是的 您可以通过定义一个函数来做到这一点力 链接
  • d3.js 和 Chart.js 之间的比较(仅适用于图表)[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我在项目中多次使用过 Chart js 但从未使用过 d3 js 很多人说 d3 js 是最好的图表 javascript 框架 但没
  • d3.js:在树布局中展开多个路径

    My JSON contains same node names in different paths I would like to be able to open all children with the same name or h
  • 矩形相当于文本的文本锚点表示属性吗?

    是否有一个与文本的文本锚点表示属性等效的矩形 我希望能够从左侧 右侧或根据情况定位矩形 我知道这可以通过一些简单的计算来完成 但我只是想知道是否已经存在内置的东西 文本锚点演示属性上的链接 https developer mozilla o
  • d3 (v4) 树布局和打字稿:类型“HierarchyNode”上不存在属性“x”

    我正在尝试在使用时使用正确的 ts 类型d3 hierarchy具有树布局的根 例如 interface MyCustomGraphType id string children MyCustomGraphType let treeData
  • 使用 d3.json()/d3.xhr() 进行多部分发布请求

    目前是否不支持通过请求提交多部分表单数据 我了解如何使用 d3 json post 执行 POST 如上所述here https stackoverflow com questions 12493758 xhr post request u
  • d3.js V4 按钮缩放实现表现得很奇怪

    我正在尝试实现 d3 平移和缩放功能 默认的平移和缩放工作正常 但要求是我们还需要放大和缩小按钮 我还实现了缩放按钮 它也有效 奇怪的是 当我第一次移动图像并单击缩放按钮时 图像会移回到以前的位置 不仅是当我第一次用鼠标缩放并使用按钮再次开
  • 我可以补间 D3 弧的结束角度,但不能补间起始角度。我究竟做错了什么?

    我只是在玩这个演示并自己重新创建它 http bl ocks org mbostock 5100636 http bl ocks org mbostock 5100636 我可以定义一个新的 endAngle 并且它会很好地制作动画 但现在

随机推荐

  • C 结构体的 Python ctypes 定义

    我正在尝试调用 Matlab 编码器生成的一些 C 代码 Matlab 使用名为 emxArray 的 C 结构体来表示矩阵 记录如下 http www mathworks co uk help fixedpoint ug c code i
  • 如何使用 codeigniter 生成 5 位字母数字唯一 ID?

    我有一个项目 需要为用户生成唯一的 5 位数字母数字 ID 我怎样才能使用 codeigniter 实现这一点 thanks 字符串助手中有一个名为 random string 的函数 this gt load gt helper stri
  • urllib2.urlopen 在 Django 中失败

    I use urllib2 urlopen url 获取 HTML 内容 网址是http 127 0 0 1 8000 m html 该方法成功获取HTML内容 但在 Django 中 如果我尝试获取 HTML 内容 它会在函数中停止 ur
  • 检查 python 中的 type == list 是否[重复]

    这个问题在这里已经有答案了 我无法弄清楚我的代码有什么问题 for key in tmpDict print type tmpDict key time sleep 1 if type tmpDict key list print this
  • 为什么链接器要修改--defsym“绝对地址”

    目标 一个使用可执行文件中的函数 不导出符号 的共享库 Means gcc Wl defsym function 0x432238 手册页指出 defsym symbol expression Create a global symbol
  • 无法在 root 设备上运行程序“su”

    我有一部运行 Android N AOSP 版本 的 root 手机 我试图从我的应用程序获取 root 权限 但它不断被拒绝 这是我正在尝试的 java lang Process p runtime exec su DataOutputS
  • Python - 在 Windows 中的多进程下创建线程时出现“can't pickle thread.lock”错误

    我陷入了我认为的基本多进程和线程问题 我已经设置了一个多进程 其中有一个线程 但是 当我在其中设置线程类时init函数 我收到以下错误 类型错误 无法pickle thread lock对象 但是 如果线程是在线程之外设置的 则不会发生这种
  • 更改 jQuery UI 滑块大小

    我在用这个 UI 滑块 http api jqueryui com slider entry examples尺寸也是我网站上的尺寸 不是宽度 而是按钮的尺寸 演示页面底部 但是here http jqueryui com themerol
  • 如何通过 XAML 绑定设置当前 CultureUI

    我有一个绑定到字符串的 TextBlock 我希望该字符串以应用程序的当前 UI 区域性显示 我想在 XAML 中执行此操作 文本块很简单 如下所示
  • 如何从 type=file 输入中删除“未选择文件”?

    我似乎无法找到任何方法来删除显示在 文件 类型的输入旁边的 未选择文件 文本 你们知道如何删除此文本吗 input type file color transparent Enjoy
  • 如何将tmux热键设置为Ctrl-,即Ctrl+逗号

    我在 Mac OS X 上设置首选 tmux 热键时遇到了一些麻烦 The most common hotkeys that invokes tmux s magics are CTRL A and CTRL B But I would r
  • Internet Explorer 8 不会修改打印样式表中的 HTML5 标记

    我之前正在制作打印样式表 并遇到了 IE8 的问题 我正在使用 HTML5 和几个布局标签 包括页眉 导航和页脚 由于某种原因 在我的打印样式表中显示 无 这些标签上的声明在 IE8 中被忽略 我只能假设后续的较低版本 我首先认为 IE9
  • Javascript 弹出窗口会消失

    我需要有一个类似消息框的东西 但没有按钮 它会显示在屏幕上All data was saved然后在 2 3 秒内消失 这就像一个警报 我们提醒用户记录已保存 但我需要它显示在屏幕顶部的一个小框中 并且它应该淡出 有人可以帮我编写一个可以执
  • 将一些提交移至另一个分支

    我只有一个分支有 git repo A B C D E master 我想将提交 B C 和 D 拆分到另一个名为开发的分支 A E master B C D develop 做到这一点最简单的方法是什么 无需关心远程仓库 做cherry
  • `/dev/urandom` 适合模拟目的吗?

    似乎在类 Unix 系统中使用纯 C fread from dev urandom是提取高质量随机字节的最简单方法 我需要运行一个每秒需要大约 10k 32 位随机数的模拟 并且可能会运行几天 是 dev urandom可以用于此目的吗 当
  • 根据具有重复测量的其他列的条件向列添加值

    我对 R 还很陌生 正在尝试在 Rstudio 中准备我的数据集以供进一步分析 如果有人能帮助我找到代码的解决方案 我将不胜感激 我的数据叫做m8 这就是我到目前为止所做的 但它只返回整个 Q2 列中 U1High U1Low 和 U1Me
  • 如何对加密算法进行逆向工程?

    我编写了一个以这种方式加密文本的应用程序 获取输入文本 反转文本 转换为十六进制 用密钥进行异或 Base64编码 现在 我自己没有做很多加密 编码 所以我的问题可能听起来很愚蠢 但是 假设我得到一个包含上述算法内容的文件 而我不知道这个算
  • 如何修改 HttpUrlConnection 的标头

    我试图稍微改进一下 Java Html 文档 但我遇到了问题HttpUrlConntion 有一件事是 如果用户代理是 Java VM 某些服务器会阻止请求 另一个问题是HttpUrlConnection不设置Referrer or Loc
  • 将数字缩放为 <= 255?

    我的单元格的数值可以是 0 到 0 之间的任何值Integer MAX VALUE 我想对这些单元格进行相应的颜色编码 如果该值 0 则 r 0 如果该值是Integer MAX VALUE 则 r 255 但是中间的值呢 我想我需要一个函
  • D3.js - 如何迭代数据集中的子数组

    我试图让 d3 迭代数据中的子数组并生成多个饼图 这是完整的代码 来自https gist github com mbostock 1305111 https gist github com mbostock 1305111 and htt