D3js 代码在调用两次时会复制图表而不是刷新

2023-11-29

这是我的 D3js 代码

    function ShowGraph(data)
{

    var w = 600,
                h = 600,
                padding = 36,
                p = 31,
                barwidth = 1;



            var bar_height = d3.scale.linear()
                            .domain([d3.max(data, function(d) { return d.count; }), 0] )  // min max of count
                            .range([p, h-p]);

            var bar_xpos = d3.scale.linear()
                            .domain([1580, d3.max(data, function(d) { return d.year; })] )  // min max of year
                            .range([p,w-p]);

            var xAxis = d3.svg.axis()
                        .scale(bar_xpos)
                        .orient("bottom")
                        .ticks(5);  //Set rough # of ticks

            var yAxis = d3.svg.axis()
                        .scale(bar_height)
                        .orient("left")
                        .ticks(5);

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

            svg.append("g")
                .attr("class", "axis")
                .attr("transform", "translate(0," + (h - padding) + ")")
                .call(xAxis);

            svg.append("g")
                .attr("class", "axis")
                .attr("transform", "translate(" + padding + ",0)")
                .call(yAxis);

            svg.selectAll("rect")
                .data(data)
                .enter().append("rect")
                .attr("class","bar")
                .attr("x", function(d) {
                    return bar_xpos(d.year); })
                .attr("y", function(d) { 
                    return bar_height(d.count); })
                .attr("width", barwidth)
                .attr("height", function(d) {return h - bar_height(d.count) - padding; })
                .attr("fill", "steelblue")  
}

我通过单击按钮运行上面的代码。当我单击按钮时,图形显示,但如果再次单击它,它会显示另一个图形。所以现在我得到 2 个图形。如果我再单击一次,我得到 3。所有我想要的是更新现有的图而不是复制图。


在这里,您总是附加一个新的 SVG 元素(.append('svg')):

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

因此,无需使用新的 SVG 元素(以及新的图形),只需维护指向第一个选定图形的链接并覆盖它或再次选择 SVG:

   var svg = d3.select( '#D3line svg' );
   if ( !svg ) {

      svg = d3.select("#D3line").append("svg")
                                      .attr("width", w)
                                      .attr("height", h);
   }

或者清除 SVG 所在元素的所有内容:

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

D3js 代码在调用两次时会复制图表而不是刷新 的相关文章

随机推荐

  • 如何避免 Firebase 数据库中的重复数据

    在我的 Android 应用程序中 我以这种方式在 firebase 数据库中插入 VideoEntity 对象 Override protected void onCreate Bundle savedInstanceState Log
  • 了解路由事件:为什么我需要气泡事件和隧道事件?

    I read this关于路由事件的好文章 我明白为什么我们有时需要冒泡事件 有时需要隧道事件 我不明白的是 当我们使用隧道事件时 为什么在处理或到达源元素后 仍然启动气泡事件 提前致谢 该文章表示 如果您将图像放在按钮上 并且单击该图像
  • 刷新后保留网页的更改

    我最近开发了一个脚本来突出显示网页中的文本document execCommand 但如果我刷新网页 更改就会消失 如何为每个用户保留零钱 由于我相当不确定您真正想要坚持什么 我将提供一些通用信息 一些好的读物深入研究 HTML5关于存储
  • Google Places API Android resultCallback 未触发

    我正在使用适用于 Android 的 Google Places API 但似乎无法获取resultCallback from a PendingResult开火 这是我的代码 与示例代码基本相同https github com googl
  • 图像析构函数中的访问冲突

    我可能会说一个非常简单的程序 include
  • Kill 后的未知错误未成功终止:发信号通知 init 进程导致“权限被拒绝”\n:未知'

    我正在尝试启动一些 docker 容器 或者至少忙于 docker 容器 第一次安装后 一切都很完美 并不会做任何与 docker compose up down stop restart 不同的事情 并制作一些 wordpress 容器
  • 如何在某些智能指针中实现深复制功能?

    unique ptr 非常有用 然而 它是不可复制的 如果为其指向的类提供虚拟克隆 深复制 方法 我认为它将变得更有用 有必要或者有更好的实现方式吗 某些库中是否存在类似的智能指针 这是一个版本 template
  • 对没有组合的嵌套 boost::bind 执行参数替换

    假设我有一个函数 它接受一个无效函子作为参数 void enqueue boost function
  • 检测平板电脑

    我有一个 net winforms 应用程序 一些用户将在 Win7 平板电脑上运行该应用程序 对于这些用户 我想更改某些 UI 元素以使笔输入更容易 同时将这些项目留给普通用户 我已经能够找到有关笔和触摸设计指南的 msdn 文档 以及有
  • AttachConsole 的实际最低版本要求是什么?

    在线 PSDK 文档指出 5 1 WinXP 要编译使用此函数的应用程序 请定义 WIN32 WINNT 如 0x0501 或更高版本 有关详细信息 请参阅使用 Windows 标头 要求 最低支持客户端 Windows XP 仅限桌面应用
  • 读取刚刚打开的SerialPort时只读取到一个字节

    奇怪的问题 当我从 com port 读取时SerialPort Read 那么如果数据到达 第一次调用时仅读取一个字节 忽略count参数和超时内可用的字节数 所有进一步的阅读都可以 只有第一个有问题 Using SerialPort D
  • 关键字不支持数据源

    我有一个带有默认成员资格数据库的 ASP NET MVC 应用程序 我通过 ADO NET 实体框架访问它 现在我想将其移至IIS 但出现了一些问题 我必须安装 SQL Server Management Studio 创建新数据库 导入之
  • 更改活动导航栏的颜色

    我正在使用一个简单的引导顶部固定导航栏 我想更改活动页面的颜色 但是我认为我的代码中缺少某些内容 div class navbar div class navbar fixed top div class container style w
  • 如何使用 Glide 获取 imageview 上的 URI

    我正在使用 Glide 将图像从服务器加载到 ImageView 我想知道是否可以从 imageview 本身中提取该 URI ImageView contentImage ImageView findViewById R id conte
  • 使用 tdbquery 查询 TDB 中的命名 RDF 图

    我正在尝试使用 tdbquery 程序查询新创建的 TDB 数据库 但是 我很难编写针对正确命名图的查询 我正在做以下事情 首先创建一个新数据集并添加一个名为 facts 的名称图 Dataset dataset TDBFactory cr
  • 我应该释放使用字符串文字初始化的 char* 吗?

    我应该自由吗char 使用字符串文字初始化变量时 对我来说 语法会让我假设它们只是堆栈分配的 但这个例子告诉我 它们不是 include
  • 如何foreach具有键值的多维数组

    我有一个带有键值的多维数组 我想循环该数组中的数据 但我不知道如何 这是我的数组 myArray Array 134 gt Array 1138 gt Array id gt 1138 qty gt 1 price gt 4900000 n
  • x64 汇编函数(调用/返回与推送/弹出/跳转)

    使用内置调用和返回指令与手动压入和弹出堆栈以及使用函数跳转之间有什么区别 从功能上讲 如果你做得正确 什么也没有 然而 它需要更多的指令和 或寄存器来模拟call ret using push pop 当然如果你真的想发挥到极致 你也可以效
  • 如何显示 JQPLOT 图形而不是长文本

    我在控制器类中有一个返回 JSON 数据的方法 public ActionResult ChartDataJSON Chart chart new Chart DataSet ds dbLayer GetChartData DataTabl
  • D3js 代码在调用两次时会复制图表而不是刷新

    这是我的 D3js 代码 function ShowGraph data var w 600 h 600 padding 36 p 31 barwidth 1 var bar height d3 scale linear domain d3