如何在 d3 中的水平条形图上的 x 轴上添加一条线

2024-03-10

我想在水平条形图上添加一条线,如图所示,在本例中,该线应代表 x 轴上的 270,但我收到错误无效路径属性。这里是笨蛋代码: http://plnkr.co/edit/WaDnDRIIWZotI3PrpUdN?p=info

 var info = [
     {name: "Walnuts",   value:206}, 
    {name: "Almonds",   value:332}

    ];

    /* Set chart dimensions */
    var width   = 960, 
        height  = 500,
        margin  = {top:10, right:10, bottom:20, left:60};

    //subtract margins
    width  = width  - margin.left - margin.right;
    height = height - margin.top  - margin.bottom;

    //sort data from highest to lowest
    info = info.sort(function(a, b){ return b.value - a.value; });

    //Sets the y scale from 0 to the maximum data element


    var max_n = 0;
    var category = []
            for (var d in info) {
                max_n = Math.max(info[d].value, max_n);
                category.push(info[d].name)
            }

            var dx = width / max_n;
            var dy = height / info.length;

   var y =   d3.scale.ordinal()
                        .domain(category)
                .rangeRoundBands([0, height], .1);

    var x = d3.scale.linear()
           .range([0, width]);


    var yAxis = d3.svg.axis()
                .scale(y)
                .orient('left')

    var svg = d3.select("#chart")
        .append("svg")
        .attr("width", "100%")
        .attr("height", "100%")
        .attr('preserveAspectRatio', 'xMidYMin')
        .attr("viewBox", '0 0 ' + parseInt(width + margin.left + margin.right) + ' ' + parseInt(height + margin.top + margin.bottom))
        .append("g")
        .attr("transform", "translate(" + margin.left + "," + margin.top + ")");

   svg.selectAll(".bar")
                .data(info)
                .enter()
                .append("rect")
                .attr("class", function(d, i) {return "bar" + d.name;})
                .attr("x", function(d, i) {return 0;})
                .attr("y", function(d, i) {return dy*i;})
                .attr("width", function(d, i) {return dx*d.value})
                .attr("height", dy)
                .attr("fill", function(d, i){
                  if(d.name == 'Walnuts') {return 'red'} else {return 'green'}
                                            });

       var y_xis = svg.append('g')
                          .attr('id','yaxis')
                          .call(yAxis);

        var lineEnd = 270;

        var line = d3.svg.line()
        line
    .x(function(d, i) { 
      return x(d.value) + i; })
    .y(function(d, i) { return lineEnd; }); 

    svg.append("path")
      .datum(info)
      .attr("class", "line")
      .attr("d", line);

你不需要d3.svg.line()这里。只需创建一个简单的行:

    var lineEnd = 270;

    var line = svg.append("line")
      .attr("x1", lineEnd)
      .attr("x2", lineEnd)
      .attr("y1", 0)
      .attr("y2", height)
      .attr("stroke-width", 8)
      .attr("stroke", "black")
      .attr("stroke-dasharray", "8,8");

这是笨蛋:http://plnkr.co/edit/dOhZjRvBHzFqWFByerKH?p=preview http://plnkr.co/edit/dOhZjRvBHzFqWFByerKH?p=preview

PS:这不是 x 轴上的 270,这只是 SVG 上的 270px。现在你不能使用x作为尺度,因为没有域。设置一个域x并用它来设置条形的宽度。

首先,摆脱这个:

    var max_n = 0;
var category = []
        for (var d in info) {
            max_n = Math.max(info[d].value, max_n);
            category.push(info[d].name)
        }

        var dx = width / max_n;
        var dy = height / info.length;

现在,设置比例:

var y = d3.scale.ordinal()
        .domain(info.map(function(d){ return d.name}))
        .rangeRoundBands([0, height], .1);

var x = d3.scale.linear()
       .range([0, width])
       .domain([0, d3.max(info, function(d){return d.value})])

然后将这些比例用于您的酒吧:

.attr("x", 0)
.attr("y", function(d){ return y(d.name)})
.attr("width", function(d) {return x(d.value)})
.attr("height", y.rangeBand())

修正了所有这些之后,now我们可以在比例中使用 270:

var line = svg.append("line")
      .attr("x1", function(){ return x(lineEnd)})
      .attr("x2", function(){ return x(lineEnd)})
      .attr("y1", 0)
      .attr("y2", height)
      .attr("stroke-width", 6)
      .attr("stroke", "black")
      .attr("stroke-dasharray", "8,8")

这是更新后的插件:http://plnkr.co/edit/gtPA12qSf9mBoAY6MeDd?p=preview http://plnkr.co/edit/gtPA12qSf9mBoAY6MeDd?p=preview

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

如何在 d3 中的水平条形图上的 x 轴上添加一条线 的相关文章

  • 在 JavaScript 中生成 RSA 密钥对

    我最近发现了这个 RSA JavaScript 库 http www ohdave com rsa http www ohdave com rsa 但是 它要求预先生成密钥 这是我的问题 问题 我想在 JavaScript 中生成 RSA
  • 跨域XMLHttp请求

    这是我的情况 我有一台 Web 服务器机器 一台客户端机器和第三台运行一些侦听 XMLHttpRequest 的程序的机器 客户端从客户端计算机访问网络服务器 进行一些更改 然后单击 保存 此时 数据被发送回网络服务器和第三台机器 所有这些
  • 滚动时输入自动完成位置错误(chrome)

    我在输入文本的默认自动完成功能方面遇到了一些麻烦 滚动时它不会相应移动 我希望自动完成文本保留在输入的正下方 有办法做到这一点吗 我在 Chrome 浏览器版本 57 0 2987 133 中发生这种情况 fiddle https jsfi
  • 仅单击 div 内部

    我正在为一个小网站制作教程 我只想让教程气泡可点击 因此 当我们尝试单击气泡之外的某些内容时 什么也不会发生 换句话说 我希望我的 html 不可点击 而 tutorial bubble 可点击 尝试这个 jQuery function h
  • 在 javascript、jQuery 或 css 中,如何让 div 或 iframe 展开以填充其余空间

    我有三个 iframe 我将顶部 iframe 设置为 50px 高度 将底部 iframe 设置为 50px 但我希望中间 iframe 扩展以填充其余空间 有没有一种技术可以用来对任何窗口屏幕尺寸执行此操作 谢谢 example
  • 如何防止 gulp-notify 破坏 Windows 中的 gulp-watch?

    我正在使用吞咽通知 https www npmjs org package gulp notify插入 这是我如何在 gulpfile js 中实现它的示例 您可以看到我也在使用 gutil 和 livereload 我不知道它们是否发挥任
  • html 表格单元格的条件格式

    是否有现成的解决方案可以对 HTML 表格进行条件格式设置 通过条件格式 我更感兴趣的是根据该列或其他列 在同一个表中 的值 数字 将不同的颜色作为单元格背景 类似于我们在 Excel 条件格式 gt 色阶 gt 红黄绿中的内容 我想在通过
  • window.onbeforeunload 在 Android Chrome 上不会触发 [alt.解决方案?]

    我开发了一个简单的聊天应用程序 我正在使用 window onbeforeunload当有人关闭选项卡 浏览器时 基本上是当用户离开房间时 通知其他用户 这是我的代码 scope onExit function scope chatstat
  • 在鼠标光标位置添加 cytoscape 节点

    我想在画布上的单击事件上的鼠标箭头位置添加一个 cytoscape 节点 我怎样才能做到这一点 我的方法 效果不太好 我可以通过单击创建一个节点 但无法确保创建的节点的位置位于我单击的位置 使用这样的东西 cy click function
  • javascript jquery 使用脚本更改脚本的src

    我有一个 JavaScript 脚本 它有一个 src 元素 这个 src 是一个 url 我想使用 javascript 更改它 一次更改为其他内容 或者动态创建它 使用 javascript jquery 动态创建脚本元素的最佳方法是什
  • 在 jQuery 可排序中对多个选定项目进行排序?

    我试图在 jQuery 可排序集中选择多个项目 然后将选定的项目一起移动 这是我的弱点开始尝试使其发挥作用 http jsfiddle net benstenson CgD8Y 这是代码 HTML div class container d
  • 了解 JavaScript - 资源

    使用 StackOverflow 的微型 Digit Blog 功能进行描述here https stackoverflow com about 我想发布以下我刚刚看到的 我觉得很有趣的谷歌技术谈话视频 我一直在理解 javascript
  • 在管道中重用变量的功能方式

    在 javascript 和 typescript 中与 Ramda 一起使用函数式编程 我经常发现自己编写如下代码 const myFun c gt const myId c id const value pipe getAnotherO
  • 计算文本选择的 xy 位置

    我正在尝试使用 DOM 元素创建自己的文本选择 是的 我的意思是当您在此元素中选择文本时 您会在文本后面看到蓝色背景 这个想法是停止默认行为 蓝色 并使用我自己的元素来完成工作 方法是找到选择的 xy 位置 然后放置绝对定位的元素 我希望能
  • 如何在 ASP.NET MVC 3 的 Razor 视图中编码嵌入的 javascript?

    如何在以下上下文中正确编码 JavaScript 我的 JSON 对象中的值是由应用程序管理员设置的 因此我假设它们需要正确编码 对于 HTML 和 JavaScript 都是如此 我在用着System Web Script Seriali
  • Node.js 未处理的“错误”事件

    我编写了一个简单的代码并将其保存在文件 try js 中 var http require http var makeRequest function message var options host localhost port 8080
  • Knockout.js 安全绑定

    我想使用带有淘汰赛的安全绑定 为此我使用敲除安全绑定 js https github com brianmhunt knockout secure binding 谁能解释一下为什么下面的代码不起作用 它会抛出一个错误 未捕获 淘汰 安全
  • 尝试在 React 应用程序中连接到 MySQL 数据库时,无法读取未定义的属性(读取“查询”)错误

    我正在尝试连接到 MySQL 数据库并在单击按钮后在 React 应用程序中运行查询 一些它如何给出错误 我当前的代码如下所示 import mysql from mysql function App async function sync
  • RoR - Rails 中的大文件上传

    我有一个 Rails Web 应用程序 允许用户上传视频 视频存储在 NFS 安装的目录中 当前的设置适用于较小的文件 但我也需要支持大文件上传 最多 4GB 当我尝试上传 4GB 文件时 它最终会发生 但从用户体验的角度来看很糟糕 上传开
  • IE 中的每个 JavaScript 支持?

    我有这个代码

随机推荐

  • 如何使用 JavaScript 在 IE 6 7 8 9 中分离事件

    这是部分代码 不是完整版本 我有一个荧光笔 可以在以下情况下突出显示特定的 html 元素 鼠标悬停 我也有一个点击事件和监听器 我的问题是 荧光笔事件 侦听器使用 Internet Explorer v6 v7 v8 v9 时不分离 我究
  • 始终在非视网膜显示屏上使用的图像的视网膜版本

    In Cocoa application I ve got 16x16 and 32x32 2x version of an image When the image is displayed in NSImageView Mac OS X
  • MongoDb:避免过多的磁盘空间

    我有一个已分配85GB空间的数据库 我使用 show dbs 命令获得了这个大小 但是当我使用 db stats 时 我得到的存储大小为 63GB 查看文档后 我发现 dat mongo db 为创建的数据库分配了一个大小 然后填充了实际数
  • 使用 Play 核心库验证非 Google Play 应用安装

    一些背景 我们大多数人可能都遇到过这样的情况ResourceNotFoundException当我们迁移到安卓应用程序包释放方法 很明显 问题是由于侧面加载应用程序造成的 参考这里 https stackoverflow com quest
  • 我可以在编辑器编辑器中自定义标题标签(h1,h2,h3 ...)吗?

    我使用了 redactor 编辑器的插件来更改文本的字体大小和字体颜色 除了标题之外 它在其他标签中工作正常 不明白为什么 我试过这个 redactor redactor focus true plugins fontcolor fonts
  • 如何使用 ElementRef 和 Renderer2 将角度指令分配给 html 元素?

    我正在 Angular 6 中开发拖放应用程序 在拖放操作中 我正在动态创建新的 HTML 元素 DIV textarea 等元素 并为其分配样式 属性 默认 x 和 y 坐标通过使用应用程序的 ElementRef 和 Renderer2
  • DatabaseGenerateOption.Identity 不生成 Id

    使用 EntityFramework 代码优先 我创建了一个简单的Foo桌子 这是我的实体 public class Foo DatabaseGenerated DatabaseGeneratedOption Identity public
  • 如何解决 django.db.utils.IntegrityError: (1364,“字段‘名称’没有默认值”)

    我在尝试为 Django 项目创建超级用户时收到此错误 不确定哪个表需要默认值 name column 为我的 Django 项目成功创建迁移后 我运行了python manage py createsuperuser创建超级用户并得到以下
  • 以编程方式在 Eclipse 中导入库

    有没有办法以编程方式将库 Jar 文件 放入 Eclipse 项目中 到目前为止 我已经成功地使用以下命令以编程方式对其进行了外部引用 IPath path new Path C myfolder mylibrary jar librari
  • 如何将 ggplot2 grobs 与数据关联起来?

    例如 给定一个点的 ggplot 您如何找出给定点对应的数据行 样例图 library ggplot2 p lt ggplot mtcars aes mpg wt geom point facet wrap gear 我们可以得到包含点的
  • EXC_BAD_ACCESS绘制阴影

    我试图向我的 UIView 添加阴影 但在我的 drawRect 方法中我得到了 EXC BAD ACCESS 我用的是ARC void drawRect CGRect rect CGColorRef lightColor UIColor
  • cakephp 模型关联/与同一张表连接[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我有一张包含父母和孩子的桌子 我希望
  • Spring Security:@PreAuthorize仅与@RequestMapping一起使用

    我有一个 Spring MVC 控制器 想使用 Spring Method Security 来保护它 在下面的例子中it works RequestMappingand PreAuthorize注释相同的方法 Controller pub
  • CoordinatorLayout 不工作

    我正在尝试实施一个CoordinatorLayout从新公布的Android 设计支持库 http android developers blogspot co uk 2015 05 android design support libra
  • 根据相关模型使用查询参数进行过滤

    我正在尝试根据相关模型过滤集合 我已经尝试了多种方法 但无法使其工作 App BetroundStatsController Ember ArrayController extend needs betround queryParams q
  • WCF 请求处理线程是否敏捷?

    我看过很多关于敏捷 Asp Net 请求处理如何的文档 我想知道 WCF 请求处理的情况是否相同 我们可以相信启动 Wcf 请求处理的线程将完成它吗 我正在维护一个 Wcf 应用程序 其中很多地方都使用 ThreadStatic 变量 虽然
  • 3D曲线拟合

    我有离散的规则网格a b点及其对应的c值 我进一步对其进行插值以获得平滑的曲线 现在 根据插值数据 我还想创建一个用于曲线拟合的多项式方程 如何用多项式拟合 3D 图 我尝试在 MATLAB 中执行此操作 我使用 MATLAB r2010a
  • 作为原始“docker run”重新连接到容器

    我有一些容器正在运行 有时终端中的连接会丢失 容器仍然完美运行 如何重新连接到相同的用户进程 问题是 当我做docker exec it name bash 我得到了一个新的 root 用户 但随后我需要停止原始用户启动的应用程序以使它们进
  • 在 PyDev 中使用协议缓冲区时导入未定义的变量

    我有一个使用协议缓冲区的 PyDev 项目 Protocol buffer 文件位于由 protoc 编译器生成的 zip 文件中 当我运行程序时 一切正常 但是 PyDev 为每个枚举常量报告 未定义的导入变量 例如 import mod
  • 如何在 d3 中的水平条形图上的 x 轴上添加一条线

    我想在水平条形图上添加一条线 如图所示 在本例中 该线应代表 x 轴上的 270 但我收到错误无效路径属性 这里是笨蛋代码 http plnkr co edit WaDnDRIIWZotI3PrpUdN p info var info na