循环堆积图 - 两组值之间的转换

2023-12-04

我有一个非常类似于的图表圆形包装

在某些时候,用户希望看到一些不同的数据。显然,可以立即显示不同的图表,但从感知和认知的角度来看,过渡会更好。注意:层次结构保持不变,没有新的或删除的节点,只有确定圆大小变化的基础值。

实施这样的好方法是什么两个圆包图之间的平滑过渡具有相同的结构但不同的值?

(当然,在过渡过程中,假设持续10秒,不需要像原始图中那样保持圆圈之间的关系,圆圈可以相交并穿过另一个圆圈)

我知道有类似的解决方案treemaps。然而,它根本不能应用于圆形包装。树形图甚至有一个特殊的函数 Sticky() 在这种情况下可以提供帮助。

编辑:我附上新版本jsfiddle.

一些功能现在开始工作。由随机数据驱动的转换非常漂亮。

我现在有两个担忧:

  1. 我不知道如何更新工具提示。这很重要,用户应该能够通过工具提示识别数据点。另一方面,好的事情是它们不需要在过渡期间进行插值,突然的变化就足够了,但我不知道该怎么做。
  2. 我实在是看不懂代码。编码主要是试错过程。如果有人验证代码是好的,或者可能不好,或者可能不同,我将不胜感激。

编辑2:我解决了问题,并在答案中附加了jsfiddle(如果有人需要代码)。仍然欢迎大家对解决方案发表评论。

enter image description here

代码中最关键的部分似乎是:

function updateVis() {
    // change pack value
    if (updateMethod == 0)
        pack.value(function(d) { return d.size; });
    if (updateMethod == 1)
        pack.value(function(d) { return 100; });
    if (updateMethod == 2)
        pack.value(function(d) { return 1 + Math.floor(Math.random()*101); });

    var data1 = pack.nodes(data);

//    titles = ?????

    circles.transition()
        .duration(2000)
        .attr("cx", function(d) { return d.x; })
        .attr("cy", function(d) { return d.y; })
        .attr("r", function(d) { return d.r; });
    return;
};

预先感谢您的任何帮助或提示。


看来我终于解决了所有问题。 jsfiddle 是here.

以下是处理平滑圆包布局过渡的完整代码(数据定义和按钮创建除外):

var diameter = 500,
    format = d3.format(",d"),
    dataSource = 2;
var pack = d3.layout.pack()
    .size([diameter - 4, diameter - 4])
    .value(function(d) { return d.size; });
var svg = d3.select("body").append("svg")
    .attr("width", diameter)
    .attr("height", diameter);

var data = getData();

var vis = svg.datum(data).selectAll(".node")
    .data(pack.nodes)
   .enter()
    .append("g");

var titles = vis.append("title")
    .attr("x", function(d) { return d.x; })
    .attr("y", function(d) { return d.y; })
    .text(function(d) { return d.name +
        (d.children ? "" : ": " + format(d.value)); });

var circles = vis.append("circle")
    .attr("stroke", "black")
    .style("fill", function(d) { return !d.children ? "tan" : "beige"; })
    .attr("cx", function(d) { return d.x; })
    .attr("cy", function(d) { return d.y; })
    .attr("r", function(d) { return d.r; });

updateVis();

function updateVis() {

    if (dataSource == 0)
        pack.value(function(d) { return d.size; });
    if (dataSource == 1)
        pack.value(function(d) { return 100; });
    if (dataSource == 2)
        pack.value(function(d) { return 1 +
                 Math.floor(Math.random()*301); });

    var data1 = pack.nodes(data);

    titles.attr("x", function(d) { return d.x; })
        .attr("y", function(d) { return d.y; })
        .text(function(d) { return d.name +
            (d.children ? "" : ": " + format(d.value)); });

    circles.transition()
        .duration(5000)
        .attr("cx", function(d) { return d.x; })
        .attr("cy", function(d) { return d.y; })
        .attr("r", function(d) { return d.r; });
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

循环堆积图 - 两组值之间的转换 的相关文章

  • SVG 查找路径的旋转角度

    我的 SVG 地图有问题 我使用 jVectorMap 创建自定义地图 我需要在字段中心写入每个字段的名称 例子是 JSFiddle 示例 http jsfiddle net mmogn90q 1 放大右侧查看文字 我可以用这个函数找到每个
  • 将 SVG 文件转换为多个不同大小的 PNG 文件

    我有一个 SVG 格式的徽标图像 我想知道是否有办法生成多个不同大小的 png 文件 例如 我设置了 20 个不同的宽度和高度 它会生成 20 个 PNG 文件 如果我必须一次处理 5 张图像也没关系 我已经安装了 illustrator
  • 有没有办法将 SVG 字符串渲染到 Web Worker 中的 OffscreenCanvas?

    我正在开发一个网页 对 SVG 字符串数据进行一些相当繁重的处理 因为这些字符串的大小可能达到 m bs 所以我想将 SVG 的渲染 取决于浏览器 移至工作人员 以避免阻塞 UI 我的问题是 worker 中无法访问 DOM 元素 有没有办
  • d3.js - .exit().remove() 组元素不起作用

    我正在构建一个动态条形图 查看肯尼亚和坦桑尼亚男孩和女孩的考试成绩 用户可以从下拉菜单中选择他们想要查看哪个国家 肯尼亚 坦桑尼亚 和哪一年 2010 年 2011 年 的分数 我已清理所有数据并将其组织到单独的国家 地区年份 csv 文件
  • 如何在 React 组件中使用 CDN

    我正在尝试使用基于 D3 构建的库 称为 Greuler 来动态渲染图形 它的 npm 包似乎已损坏 当我改用 Greuler CDN 时 index html 中的测试图终于起作用了 但是 我正在开发一个 React 应用程序 并且我希望
  • 如果没有当前类的引用,svgLoader 无法工作

    这是我的主类 通过这个类 我通过 url 从 api 获取数据 并创建一个适配器类来维护它 但发生了意外错误 这是MainActivity java public class MainActivity extends AppCompatAc
  • 如何使用div绘制曲线?

    我需要使用 CSS 绘制两条曲线 我尝试过组装一些divs 使用CSSborder radius绘制弧形面板 但结果很糟糕 还有更好的算术吗 正如我之前在评论中提到的 请不要使用CSS用于实现复杂的曲线和形状 虽然仍然可以使用 CSS 来实
  • 改进 D3 序列旭日示例

    This D3示例作为我的出发点 http bl ocks org kerryrodden 7090426 http bl ocks org kerryrodden 7090426 我想更改提供图表的数据 并且我做了以下新示例 http j
  • 如何在光标下的所有元素上调用 mouseover?

    我有一个网络应用程序 每次单击时都会创建一个点 见下文 当我将鼠标悬停在一堆点上时 我希望光标下的每个点都会触发 mouseover 或 mouseenter 事件 然而 只有一个事件被触发 即堆栈 顶部 的点的事件 当鼠标移动到一堆多个点
  • D3 版本 5,如何将 Promise 链接到图表构建

    我想将 JS Promise 链接到 D3 v5 图表构建 并想在动画之后解决它 但它不起作用 下面的代码还在注释中显示了不同类型的尝试 它们都不起作用 选项 3 导致异常 未捕获 承诺中 类型错误 无法读取未定义的属性 on 选项 2 和
  • D3 v4 中的 d3.rebind

    所以我在网上找到了这段代码 它计算 d3 图中节点上的 dijkstra 最短路径算法 问题是 d3 rebind 已被删除 我还没有找到修复这段代码以使其工作的方法 有什么建议么 我也知道这段代码不是我的 所以这就是为什么我在理解如何更改
  • SwiftUI Switch 语句转换行为不符合预期

    我越来越出乎意料 transition使用时的行为switch更新视图的语句与使用两个语句时的比较if声明 他们俩if语句正在按预期将视图滑入和滑出 但是 相同的转换switch语句导致视图从一侧滑入并从另一侧退出 我正在寻找使用switc
  • Internet Explorer 9 和 10 中的 SVG 背景大小不同

    我一直在尝试使用 SVG 作为元素的背景图像 使用background size 财产 这在大多数当前浏览器中效果很好 但 Internet Explorer 似乎会误解这些值 当我仅使用一个值时 图像会以小得多的尺寸显示 而两个值的比例会
  • 尝试将 SVG 绘制到画布上,为什么我的 SVG XML 被截断?

    我真正想做的就是将我喜欢的动态创建的 SVG 放入 PDF 中 目前通过 jsPDF 添加 SVG 不起作用 因此我尝试将它们转换为 PNG 以便尝试添加图像 这是 IE11 中的情况 客户端要求 如果我做 var lsvg d3 sele
  • Google TreeMap 填充值设置为 _ABSTRACT_RENDERER_ID_1

    我正在使用谷歌树图来呈现一些数据 我的 showScale 组件有问题 当树形图渲染时 showScale 组件应显示 minColor 和 maxColor 之间的 e 渐变 此时它是完全黑色的 The fillsvg组件的属性设置如下
  • SVG 线条描边-dasharray 无法正确打印为 PDF

    打印行与stroke dasharrayPDF 创建不同的行为 请 看着那 这image https i stack imgur com doOku png here 图A 我直接从浏览器 Chrome 获取的屏幕截图 图B是同一页面的打印
  • SVG 以 % 为单位旋转文本

    我尝试旋转 svg 文本 我通过从 xslt 调用 php 函数来获取文本的位置 即 15 问题是我无法使用 旋转 svg 对象 如果我使用数字来代替 它就可以了 下面我将问题简化
  • 如何为 D3 条形图分配随机颜色?

    我正在根据下面的模型制作 D3 条形图 如何使条形具有随机颜色 jsFiddle http jsfiddle net rdesai MjFgK Code svg append g attr class x axis attr transfo
  • 使用 CWnd::EnableTooltips() 可以实现多行工具提示吗?

    我正在尝试使我的工具提示成为多行 但我似乎没有太多运气 我在创建 在本例中为编辑框 后直接调用 CWnd EnableTooltips 并处理 TTN NEEDTEXT 消息 我的工具提示显示正确 但仅显示为一行 我尝试将 n 添加到处理
  • 使用时间序列数据和scaleBand指定D3条形图上的刻度

    我尝试为具有时间序列数据的 d3 v4 条形图指定多个刻度和多个刻度标签 如下图所示 基于本教程 https bl ocks org zigahertz 1ee4965ff76514517bb7ce6af21e5d44我有一个处理时间序列数

随机推荐

  • 如何使用 RGB 像素值绘制直方图?

    我正在netbeans平台上制作应用程序 我想画直方图 我有红色 绿色和蓝色的图像像素 那么 请有人向我询问如何使用该像素值绘制直方图 我的代码如下 其中我采用图像的红色 绿色和蓝色像素值 enter code here import ja
  • 未定义的局部变量或方法 - 使用烧杯测试 Puppet 模块

    我对这一切都很陌生 我正在尝试使用烧杯测试木偶模块 我不断得到这个 NoMethodError undefined method describe for Beaker TestCase 0x007fd6f95e6460 Users use
  • 如何在 Java 中按值(ArrayList)大小对 Map 进行排序?

    我有以下地图 Map
  • 为 Google.Apis.YouTube.v3 设置代理

    我有以下代码来调用 YouTubeService service new YouTubeService new BaseClientService Initializer ApiKey AppSettings Variables YouTu
  • docker内部和外部用户之间的混淆

    所以 我正在内部使用 apache2 构建一个 docker 容器 但我遇到权限问题 我不知道如何解决它 如果我运行没有 user 规范的容器 它运行良好 但我想外在地能够将其分配给用户并限制该用户只能读取和写入特定目录 我使用 v 映射的
  • 所有 OpenMP 任务在同一线程上运行

    我使用 OpenMP 中的任务编写了一个递归并行函数 虽然它给了我正确的答案并且运行良好 但我认为并行性存在问题 与串行解决方案相比 运行时间在我在没有任务的情况下解决的相同其他并行问题中无法扩展 当打印任务的每个线程时 它们都在线程 0
  • 打印给定 pid 的子进程 (MINIX)

    我目前正在开发一个项目 作为该项目的一部分 我需要在 MINIX 中实现系统调用 库函数 作为其中的一部分 我需要能够使用给定进程的 pid 打印其子进程列表 我想我已经找到了我需要的部分内容 但我坚持让它与给定的 pid 一起工作 str
  • Python 的 SSH 隧道自动关闭

    我需要一些关于我的程序结构的建议 我正在使用连接到外部 MySQL 数据库ssh隧道 现在它可以正常工作 我可以发出 SQL 命令并获取结果 但前提是这些命令与打开连接的函数相同 如果它们处于不同的功能 隧道会在我使用之前自动关闭 参见下面
  • GemBox 从电子表格或 Flexcel 检索计算值

    根据他们的文档 GemBox Spreadsheet可以读取和写入公式 但不能计算公式结果 当您在 MS Excel 中打开 XLS 文件时 将自动计算公式结果 因此 如果我创建一个包含一些注入值的电子表格并将其保存到磁盘 如果我在 Exc
  • 如何获取准确的拨出电话接听时间?

    我是安卓新手 我正在实现一个与来电和去电详细信息相关的应用程序 我通过使用广播接收器获取拨出电话和来电详细信息 问题是当有来电时广播接收器会上升 我拨打广播接收器拨打的电话 很好 但是当我单击绿色按钮时 拨出电话就会开始 但是 我想要接听对
  • 深拷贝和浅拷贝有什么区别?

    这个问题的答案是社区努力 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 深拷贝和浅拷贝有什么区别 广度与深度 考虑以对象作为根节点的引用树 Shallow 变量 A 和 B 引用不同的内存区域 当将 B 分配给 A 时 这两个变量引
  • SQL Server 2008 - 高级搜索/排序

    我需要对列进行搜索并按特定顺序对结果进行排序 搜索条件和排序顺序如下 给定搜索文本的至少 x 和至多所有字符必须匹配 结果应按开头 然后按匹配的字符数排序 和包含 然后按匹配的字符数和字母顺序排序 进行分组 例如 搜索文本 联盟A 数据库中
  • Java 在 JTextPane 上设置缩进大小

    我想设置制表符 t 的大小JTextPane宽度为 4 个空格 经过一番谷歌搜索后 我发现了一些东西 我将在这里包含我所尝试过的东西以及它们失败的原因 如何在 JEditorPane 中设置选项卡大小 JTextPane不是一个普通的文档
  • Windows Phone 7 和 System.Xml.Linq 库

    我正在尝试遵循有关 WP7 开发的教程 http mobile tutsplus com tutorials windows introduction to windows mobile 7 development 它谈论的是使用 XEle
  • TFF 加载预训练的 Keras 模型

    我的目标是从 hdf5 文件加载基本模型 它是 Keras 模型 并继续通过联合学习对其进行训练 以下是我初始化 FL 基本模型的方法 def model fn model tf keras load model path to model
  • WIF STS ID3242:无法对安全令牌进行身份验证或授权

    当我的客户端应用程序尝试对我的服务进行身份验证时 我收到以下错误 ID3242 无法对安全令牌进行身份验证或授权 这是客户端的配置
  • POST 请求中的 PHP Post 请求

    有一个联系表格 当前的操作是http www siteA com ContactInfo php 它发送字段和值 在 ContactInfo php 中 我只是捕获值并将其发送并通过电子邮件发送至 电子邮件受保护 但是 在 ContactI
  • 使用 GhostDriver 时如何设置屏幕/窗口大小

    我在一个基于 Java 的项目中使用 GhostDriver 作为 WebDriver 实现 我想拍摄页面快照 默认的页面大小有点尴尬 所以我想控制快照的页面大小 但是 我无法从 Google 找到任何示例 那么 有人可以告诉我怎么做吗 非
  • 有没有办法在多行代码中添加注释?

    这不起作用 something line of code Comment another line of code Comment and another one Comment etc 这也不 something Comment line
  • 循环堆积图 - 两组值之间的转换

    我有一个非常类似于的图表圆形包装 在某些时候 用户希望看到一些不同的数据 显然 可以立即显示不同的图表 但从感知和认知的角度来看 过渡会更好 注意 层次结构保持不变 没有新的或删除的节点 只有确定圆大小变化的基础值 实施这样的好方法是什么两