将图表添加到 d3 中的工具提示

2024-01-03

我正在尝试向我的工具提示添加一个简单的条形图;它由两个变量组成——男性和女性。我希望有人能够帮助我将其放入工具提示中,而不是将其附加到当前附加的位置。我已经给了它一个要附加的特定区域,以便我知道它实际上正在显示(确实如此),但我不知道如何将其放入工具提示中。任何帮助深表感谢。哦,这需要在 d3 中完成,这也是我问这个问题的部分原因——我看到了一个类似的问题,但没有在纯 d3 中实现,我无法完全遵循正在发生的事情来模拟在这个例子中。

.on("mouseover",  function(d)
{
  tip.show(d);
  var state = d.properties.name;
  var men = d.properties.men;
  var women = d.properties.women;
  var dataset = [men, women];
  var barHeight = 20;

  var x = d3.scale.linear()
    .domain([0, d3.max(dataset)])
    .range([0, width/2]);

  var chart = d3.select(".chart")
    .attr("width", width)
    .attr("height", barHeight * dataset.length);

  var bar = chart.selectAll("g")
    .data(dataset)
    .enter().append("g")
    .attr("transform", function(d, i)
    {
      return "translate(0," + i * barHeight + ")";
    });

  bar.append("rect")
    .attr("width", x)
    .attr("height", barHeight - 1);

  bar.append("text")
    .attr("x", function(d)
    {
      return x(d)/2+5;
    })
    .attr("y", barHeight / 2)
    .attr("dy", ".35em")
    .text(function(d)
    {
      return "$" + d;
    });
})

由于您没有共享创建图表的完整代码,因此该答案将仅处理您的问题的标题:

如何在工具提示中创建图表?

我不是一个d3.tip()用户,因为我创建了自己的工具提示。但你想要的一点也不复杂:正如工具提示所示<div>元素,你绝对可以在其中添加 SVG。

然而,你必须知道where创建 SVG。因此,在下面的演示中,我将创建这个d3.tip工具提示:

var tool_tip = d3.tip()
    .attr("class", "d3-tip")
    .offset([20, 120])
    .html("<p>This is a SVG inside a tooltip:</p>
        <div id='tipDiv'></div>");
    //div ID here --^

这里重要的部分是:有一个内在的<div>在 d3.tip div 内,具有给定的 ID(在这种情况下,tipDiv)。我将使用该 ID 在工具提示中创建 SVG:

selection.on('mouseover', function(d) {
    tool_tip.show();
    var tipSVG = d3.select("#tipDiv")
        //select the div here--^
        .append("svg")
        //etc...
})

这是演示:

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

var tool_tip = d3.tip()
  .attr("class", "d3-tip")
  .offset([20, 120])
  .html("<p>This is a SVG inside a tooltip:</p><div id='tipDiv'></div>");

svg.call(tool_tip);

var data = [14, 27, 19, 6, 17];

var circles = svg.selectAll("foo")
  .data(data)
  .enter()
  .append("circle");

circles.attr("cx", 50)
  .attr("cy", function(d, i) {
    return 20 + 50 * i
  })
  .attr("r", function(d) {
    return d
  })
  .attr("fill", "teal")
  .on('mouseover', function(d) {
    tool_tip.show();
    var tipSVG = d3.select("#tipDiv")
      .append("svg")
      .attr("width", 200)
      .attr("height", 50);

    tipSVG.append("rect")
      .attr("fill", "steelblue")
      .attr("y", 10)
      .attr("width", 0)
      .attr("height", 30)
      .transition()
      .duration(1000)
      .attr("width", d * 6);

    tipSVG.append("text")
      .text(d)
      .attr("x", 10)
      .attr("y", 30)
      .transition()
      .duration(1000)
      .attr("x", 6 + d * 6)
  })
  .on('mouseout', tool_tip.hide);
.d3-tip {
  line-height: 1;
  padding: 6px;
  background: wheat;
  border-radius: 4px solid black;
  font-size: 12px;
}

p {
  font-family: Helvetica;
}
<script src="https://d3js.org/d3.v4.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3-tip/0.7.1/d3-tip.min.js"></script>
<p>Hover over the circles:</p>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将图表添加到 d3 中的工具提示 的相关文章

随机推荐

  • 在 WooCommerce 3+ 中向订单添加自定义字段

    在 WooCommerce 中 我想添加一个新的自定义字段来订单详细信息 现在我可以使用下面的代码创建一个新的自定义字段 referenceNumber 并在其中添加 ordercreated 值 update post meta orde
  • SpriteKit场景切换时的内存问题

    Ok so awhile back in testing I had a random crash with no error and I have no clue why So i went into analyze things and
  • npm 如何/为什么建议不要以 root 身份运行?

    简而言之 首先 为什么npm http npmjs org 建议它只能以非 root 身份运行 我非常不相信其他所有包管理器 apt yum gem pacman 要求 sudo 是错误的 其次 当我遵循他们的建议 并运行npm insta
  • :this 在 Ruby on Rails 中意味着什么?

    我是 Ruby 和 Ruby on Rails 世界的新手 我已经阅读了一些指南 但我在使用以下语法时遇到了一些问题 我认为使用 conditionRuby 中使用语法来定义具有某种访问器的类属性 例如 class Sample attr
  • 将 Flutter 小部件定位到屏幕外

    正如标题所提到的 我试图将我的小部件放置在屏幕之外 目前我已经设法将小部件图像偏移到屏幕之外 但这不是我期望的结果 屏幕外的图像在状态栏上仍然可见 这就是它的样子 这就是我期望的样子 用 adobe XD 设计 Widget build B
  • Rails 3 的 A/B 框架?

    有没有像 ABingo 或 Vanity 这样的东西可以在 Rails 3 中运行 我知道有 Google 网站优化器和可视化网站优化器 但我需要更多的功能来确定显示的内容以及跟踪的内容 而这些功能超出了它们的能力 如果没有 我什至会考虑相
  • 为什么简单的 Dockerfile 给出“权限被拒绝”?

    我正在学习将 Docker 与 ROS 结合使用 我对以下错误消息感到惊讶 FROM ros kinetic robot xenial create non root user ENV USERNAME ros RUN adduser in
  • 如何在 Entity Framework Core 中调用带有多个表联接的存储过程?

    我必须调用一个从多个表中选择记录的存储过程 我已尝试以下代码 但它为实体类以外的其他表中的列返回 null private async Task
  • 子+父参考SQL

    我正在尝试编写一个查询来显示项目的名称和父项目的名称 但到目前为止还没有提供正确的方法 CREATE TABLE project p id NUMBER 6 project name VARCHAR2 30 client id NUMBER
  • 如何使用div代替表格

    我正在尝试创建以下表格布局 但我想使用 DIV 而不是 TABLE CELL1 CELL2 CELL3 我希望所有单元格的高度由其内容设置 即没有高度 样式 我尝试过在 cell1 上使用 float left 但似乎无法让单元格 2 和
  • Mac OS X Java 更新的源代码[重复]

    这个问题在这里已经有答案了 Java for Mac OS X 10 6 Update 3 升级到 java 1 6 0 22 但是 它们不包含源代码或 JavaDoc 有谁知道苹果是否提供了源代码 如果是 在哪里可以找到它 我想将源代码附
  • 增加值并将其设置为 onClick 事件的 var

    我面临着一个非常奇怪的问题 导致感觉就像 无论你如何 首先这是代码 renderImages gt let i 0 const arr https truffle assets imgix net pxqrocxwsjcc 6OcJeUMa
  • MySQL If Date 语句?

    有没有办法通过 mysql 查询返回 true 或 false 我有一张桌子 id start 4 2012 03 01 00 00 00 8 2012 01 20 00 00 00 我也想回来TRUE如果当前日期大于开始日期并且FALSE
  • 有没有办法允许用户提交 html 内容,同时仍然启用模型验证?

    我需要允许用户在其文本输入中提交包含 html 的表单值 这是一个面向内部的应用程序 因此这样做相当安全 我已经成功地使用了 ValidateInput false 有关方法的属性 但这会抑制all对相关方法 视图模型进行模型验证 但我只想
  • 如何像 jsfiddle.net 中那样调整多个相邻文本区域的大小?

    如何像jsfiddle net网站那样通过在区域1 2和3上拖动鼠标来调整textarea的大小 我的代码是 HTML div fieldset div class window top A div div class handler ho
  • 正则表达式仅匹配字符串以目标结尾的情况

    我需要一个正则表达式 它仅与以我要查找的目标结尾的字符串匹配 我需要找到具有特定扩展名的文件 问题是该扩展名也出现在其他文件中 例如我有两个文件名为 B82177 2014 07 08T141507758Z ccf and B82177 2
  • iPhone SDK WebRTC 集成错误

    安装时WebRTC我的 iOS 项目出现以下错误 Undefined symbols for architecture i386 OBJC CLASS RTCICECandidate referenced from objc class r
  • 没有 if-else 语句的一维卷积(非 FFT)?

    我编写了一个简单的串行一维卷积函数 如下 我也在尝试 GPU 卷积实现 这主要是出于我自己的好奇心 我正在尝试了解各种非 FFT 实现策略之间的性能权衡 避免分支对于我的 GPU 卷积实验非常重要 因为分支在 Nvidia GPU 上的成本
  • JavaScript 中的二进制到字符串

    我创建了一个 JavaScript 程序来将字符串转换为二进制 Input StackOverflow Output 1010011 1110100 1100001 1100011 1101011 1001111 1110110 11001
  • 将图表添加到 d3 中的工具提示

    我正在尝试向我的工具提示添加一个简单的条形图 它由两个变量组成 男性和女性 我希望有人能够帮助我将其放入工具提示中 而不是将其附加到当前附加的位置 我已经给了它一个要附加的特定区域 以便我知道它实际上正在显示 确实如此 但我不知道如何将其放