在 D3.js 中使用序数比例创建标记为 x 轴的文本

2023-11-27

我正在 d3.js 中构建一个带有序数 x 轴的条形图,其刻度应使用文本标记图表。谁能解释序数刻度如何“映射”x 到相应的条形位置?具体来说,如果我想将带有文本值数组的 x 刻度标签指定为条形图中相应的条形。

目前我将域设置如下:

    var labels = ["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t"];
    var xScale = d3.scale.ordinal()
                .domain(labels)

但是,1-19 的值显示在文本标签之后。

正如这个小提琴中所见:

http://jsfiddle.net/chartguy/FbqjD/

相关的小提琴源代码:

//Width and height
            var margin = {top: 20, right: 20, bottom: 30, left: 40};           
            var width = 600 - margin.left - margin.right;
            var height= 500-margin.top -margin.bottom;
            var w = width;
            var h = height;


            var dataset = [ 5, 10, 13, 19, 21, 25, 22, 18, 15, 13,
                            11, 12, 15, 20, 18, 17, 16, 18, 23, 25 ];

            var labels = ["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t"];
            var xScale = d3.scale.ordinal()
            .domain(labels)
                            .rangeRoundBands([margin.left, width], 0.05);
            var xAxis = d3.svg.axis().scale(xScale).orient("bottom");


            var yScale = d3.scale.linear()
                            .domain([0, d3.max(dataset)])
                            .range([h,0]);


            //Create SVG element
            var svg = d3.select("body")
                        .append("svg")
                        .attr("width", w)
                        .attr("height", h);

            //Create bars
            svg.selectAll("rect")
               .data(dataset)
               .enter()
               .append("rect")
               .attr("x", function(d, i) {
                    return xScale(i);
               })
               .attr("y", function(d) {
                    return yScale(d);
               })
               .attr("width", xScale.rangeBand())
               .attr("height", function(d) {
                    return h - yScale(d);
               })
               .attr("fill", function(d) {
                    return "rgb(0, 0, 0)";
               });

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

            //Create labels
            svg.selectAll("text")
               .data(dataset)
               .enter()
               .append("text")
               .text(function(d) {
                    return d;
               })
               .attr("x", function(d, i) {
                    return xScale(i) + xScale.rangeBand() / 2;
               })
               .attr("y", function(d) {
                    return h - yScale(d) + 14;
               });

您可以使用显式设置序数轴的刻度值d3.svg.axis().tickValues(*array*).

但这是一种奇怪的方法,因为它会危险地分离键和值,这意味着您必须小心手动对齐比例并确保数据正确对应。它有助于将键和值分组到单个对象中,然后使用以下格式:

       axis.domain(array.map(function (d) { return d.value; }))

映射您的轴域。

我已经重新设计了你的数据并进行了修改,以我认为更d3 way。 (另请注意,我只是为了好玩而做了一些其他更改,即改进了边距并清理了轴对齐方式等)

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

在 D3.js 中使用序数比例创建标记为 x 轴的文本 的相关文章

随机推荐

  • 为什么gcc不能内联可以确定的函数指针?

    以下程序在 centos 上的 gcc 4 6 2 下使用 O3 编译 include
  • 向多个接口注册相同类型

    可以将一种类型注册到多个接口吗 我有实现两个接口的类 MyService IService1 IServier2 我想为两个接口注册这个类型 container RegisterType
  • 插件产品 VS 功能产品

    在 RCP 应用程序的上下文中 我想知道我的产品是否应该基于插件或功能 我现在看到的主要区别在于导出的应用程序的内容 使用插件作为产品基础会导致导出 使用 GUI 或无头构建 这是相同的 所有必需的插件 我猜是通过插件清单计算的 相反 当使
  • 我可以使用在初始值设定项列表中初始化的 C++ 类成员(稍后在列表中)吗?

    我正在重写一些代码以消除全局变量 并使类构造函数 析构函数处理一些第三方库资源的清理 但我担心一些从类初始值设定项列表中的另一个成员初始化一个成员的代码 class MyPodofoDocument public generates pdf
  • 在 JavaScript 回调函数中设置局部变量

    我对 JavaScript 比较陌生 我以为我知道回调函数是如何工作的 但在网上搜索了几个小时后 我仍然不明白为什么我的代码不起作用 我正在发出一个返回字符串数组的 AJAX 请求 我试图将此数组设置为局部变量 但一旦执行回调函数 它似乎就
  • 确定 Firebird SQL 版本的方法?

    有什么方法可以确定 Firebird SQL 正在运行的版本吗 使用 SQL 或代码 delphi C Bye 如果你想通过 SQL 找到它 你可以使用获取上下文要查找引擎版本 请使用以下命令 SELECT rdb get context
  • C++ 抽象类析构函数[关闭]

    Closed 这个问题需要细节或清晰度 目前不接受答案 在父类中仅使用纯虚拟析构函数创建抽象类是否是一种好的做法 是否可能 这是一个示例 class AbstractBase public AbstractBase virtual Abst
  • 列出带全键的 Rails I18n 字符串

    我希望能够生成区域设置的所有 I18n 键和值的完整列表 包括完整的键 换句话说 如果我有这些文件 config locales en yml en greeting polite Good evening informal What s
  • Prettier 代码格式不会在 JSX 或 HTML 中拆分 classNames

    我启用了 Prettier VSCode 扩展 并且我的本地 prettierrc 文件已 printWidth 70然而 作为选项之一 当我的 JSX 或纯 HTML 文件中有一长串类名时 Prettier 不遵循printWidth设置
  • 如何在 Yup 异步验证中设置动态错误消息?

    我正在使用 Yup 在 Formik 中尝试异步验证 test 方法并需要设置我从 API 获得的错误消息 根据后端的某些情况 错误消息会有所不同 尝试了这里提到的一些解决方案 https github com jquense yup is
  • 新 Android Studio 中的 APK 位置

    我开始使用新的 Android Studio 但在 IDE 中找不到应用程序的 APK 它实际位于哪里 为了帮助可能寻找同一问题答案的人 了解您在 Studio 中使用的项目类型非常重要 Gradle 新建项目时默认的项目类型 一般推荐使用
  • 使用 AngularJS 路由持久化查询字符串

    我已经在一个大型 Angular 应用程序上工作了近一年了 但我一直在尝试做我期望的微不足道的事情 这是我使用参数的两条路线 为了简洁而缩短 a id a id b 假设用户位于 a 1并修改查询字符串 例如 a 1 foo 123 bar
  • 如何使用 Java 8 流迭代引用父元素的嵌套 for 循环?

    我想使用 java8 迭代嵌套列表streams 并提取第一个匹配的列表的一些结果 不幸的是 如果子元素与过滤器匹配 我还必须从父内容中获取值 我怎么能这样做呢 java7 Result result new Result find fir
  • 在不存在的地方插入-无主键

    我有 3 个表 dentists groups 和 groupdentlink 许多牙医通过 groupdentlink 表链接到许多组 因此 我尝试进行一个查询 将行插入到 groupdentlink 将该州的所有牙医与该州的所有组链接起
  • Android:在图像视图上设置时如何检测从图库中选取的图像方向(纵向或横向)?

    我正在从图库 相机相册 中选取的图像视图上设置图像 如果选取的图像具有横向方向 则它会完美显示 但如果图像处于纵向模式 即在纵向模式下单击图像 则会显示旋转 90 度的图像 现在我试图找出在图像视图上设置之前的方向 但所有图像都给出相同的方
  • 哪个版本的 jQuery 和 jQuery Mobile 可以一起工作?

    我正在开展一个业余项目 希望它成为一个包含地理定位的移动应用程序 不过 我想从简单的开始 哪个版本的 jQuery 和 jQuery Mobile 协同工作效果最好 我在 iPad 应用程序上使用了一些旧版本 但我想知道更新的版本是否可以真
  • 如何在 Objective-C 中检测外部键盘连接?

    我的应用程序需要知道外部键盘是否连接 我怎样才能知道这一点 请不要使用私有 API 如果这与 iOS 相关 我不确定您为什么要检测它 因为硬件键盘的行为与软件键盘完全相同 除了一些额外的声音 亮度等快捷方式 您的应用程序不应该这样做 无论如
  • 错误:无法为 backports.zoneinfo 构建轮子,安装 django 时出错

    我是 python 开发新手 我正在尝试使用 django 但在使用安装 django 时遇到此错误pip3 install django 4 0 我尝试了一些解决方案 但没有一个有效 我已经尝试过了 将 pip 升级到最新版本 pip i
  • 如何使用 shell 脚本删除字符串中的尾随字符?

    如何删除最后一个n使用 shell 脚本从特定字符串中提取字符 这是我的输入 ssl01 49188 ssl01 49188 ssl01 49188 ssl01 49188 ssl999999 49188 ssl01 49188 abcf9
  • 在 D3.js 中使用序数比例创建标记为 x 轴的文本

    我正在 d3 js 中构建一个带有序数 x 轴的条形图 其刻度应使用文本标记图表 谁能解释序数刻度如何 映射 x 到相应的条形位置 具体来说 如果我想将带有文本值数组的 x 刻度标签指定为条形图中相应的条形 目前我将域设置如下 var la