具有负值的条形图

2024-06-26

我需要创建一个可以有负值的 d3 条形图。理想情况下,零轴位置应根据数据的范围来计算,但我会选择一个假设对称正负范围的解决方案,即它始终位于图表的中间。

这是我想要实现的目标的示例。


好吧,假设您有一个数字数组作为数据集,其中包括一些正值和负值:

var data = [-15, -20, -22, -18, 2, 6, -26, -18];

您需要两个比例来构建条形图。您需要一个定量量表(通常是线性标尺 https://github.com/mbostock/d3/wiki/Quantitative-Scales#wiki-linear)来计算沿x- 轴,和第二个序数尺度 https://github.com/mbostock/d3/wiki/Ordinal-Scales#wiki-ordinal计算沿y-axis.

对于定量尺度,您通常需要计算数据的域,该域基于最小值和最大值。一个简单的方法是通过d3.范围 https://github.com/mbostock/d3/wiki/Arrays#wiki-d3_extent:

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

您可能还想nice https://github.com/mbostock/d3/wiki/Quantitative-Scales#wiki-linear_nice比例尺稍微变圆。另一个例子,有时您希望零值位于画布的中间,在这种情况下,您需要取最小值和最大值中的较大者:

var x0 = Math.max(-d3.min(data), d3.max(data));

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

或者,您可以对您想要的任何域进行硬编码。

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

For the y-axis,你会想要使用范围圆带 https://github.com/mbostock/d3/wiki/Ordinal-Scales#wiki-ordinal_rangeRoundBands将垂直空间划分为每个条形的带。这还允许您指定条之间的填充量。通常,序数尺度与一些识别数据一起使用,例如名称或唯一 ID。但是,您也可以将序数尺度与数据索引结合使用:

var y = d3.scale.ordinal()
    .domain(d3.range(data.length))
    .rangeRoundBands([0, height], .2);

现在您已经有了两个比例,您可以创建 rect 元素来显示条形。一个棘手的部分是,在 SVG 中,矩形是定位的(x and y属性)基于其左上角。所以我们需要使用x- and y-缩放以计算左上角的位置,这取决于关联值是正数还是负数:如果该值为正数,则数据值确定条形的右边缘,而如果为负数,则数据值决定条形的右边缘。确定条的左边缘。因此这里的条件:

svg.selectAll(".bar")
    .data(data)
  .enter().append("rect")
    .attr("class", "bar")
    .attr("x", function(d, i) { return x(Math.min(0, d)); })
    .attr("y", function(d, i) { return y(i); })
    .attr("width", function(d, i) { return Math.abs(x(d) - x(0)); })
    .attr("height", y.rangeBand());

最后,您可以添加一个轴以在顶部显示刻度线。您还可以计算填充样式(甚至渐变)来改变正值和负值的外观差异。把它们放在一起:

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

具有负值的条形图 的相关文章

  • 如何精确缩放已翻译的d3地图

    我有一张已翻译的地图 以使其正确适合画布 我正在尝试实现一种缩放它的方法 它确实有效 但是当您放大时它会远离中心 而不是以鼠标甚至画布为中心 这是我的代码 function map data total views var xy d3 ge
  • D3 时间解析返回 null

    根据此页面上的说明 https github com mbostock d3 wiki Time Formatting https github com mbostock d3 wiki Time Formatting我正在尝试解析 ISO
  • 错误: 属性 d="MNaN,NaNA67.5,67.5 0 1,1 NaN,NaNL0,0Z" 的值无效

    我制作了一个饼图 当所有值都存在时 它工作正常 但是当所有值都设为 0 时 在控制台中我收到 600 多个错误 错误 属性translate translate NaN NaN 的值无效 错误 属性 d M4 133182947122317
  • LeafletJs只显示一个国家

    我使用 Leafletjs 和 D3 来显示地图 我只想在地图上显示英国 Leaflet和D3是否可以只显示英国 这当然是可能的 现在的解决方案取决于您是想使用 D3 绘制英国 还是想从 Tile Server 获取它 在后一种情况下 有一
  • 动画 D3 地球仪 (d3.geo.azimuthal)

    我对 d3 javascript 库有疑问 我想使用方位角 http mbostock github com d3 talk 20111018 azimuthal html地球 我想从地球上的经度和纬度坐标插入点 并使地球动画化 而无需使用
  • 创建链接到 csv 文件的表

    我正在尝试创建一个链接到的表 csv使用 d3 文件 但我得到的只是一个空白网页 即使以克里米亚为例 我也得到一张空白页 我将很高兴得到指导或展示一个可行的例子或关于我做错了什么的建议 如果您询问如何从 CSV 数据创建 HTML 表 这就
  • 在 X 轴刻度上渲染 HTML

    我想在 D3 图表的 x 轴上渲染 HTML 基本上 我希望轴上的每个标签都是到数据中另一列的超链接 我试过了 x domain data map function d return a href d Name a 但它根本不起作用 我得到
  • 设置 D3 力定向图

    致尊敬的读者 我对 javascript 相当陌生 我也遇到过这个问题 我正在尝试实现这个力导向图的修改版本 http mbostock github com d3 ex force html http mbostock github co
  • 根据 D3 中的属性值对对象进行排序

    我有一系列在 D3 中使用的对象 例如 var cities city London country United Kingdom index 280 city Geneva country Switzerland index 259 ci
  • 时间序列折线图与轴不同步

    本实验基于这个d3官方例子 http bost ocks org mike path 我想要实现的是可视化时间序列数据的最后 x 分钟 我有这个代码的副本jsfiddle http jsfiddle net 225dC 3 单击以添加新数据
  • d3.js:tickformat - 添加 % 符号而不乘以 100

    我的数据有百分比 例如 10 1 3 2 5 4 d3 format 0f 会给我 10 3 5 d3 format 0 会给我 1010 320 540 乘以 100 如何得到 10 3 5 我不知道在哪里添加 到第一种情况 或者在第二种
  • D3.js折线图溢出边距

    我有 d3 js 折线图 它作为 angular js 应用程序的指令包含在内 动态添加的线和 xAxis 以及缩放线上的边距溢出 我必须在图的顶部为每条加载的线创建 Ox 轴 并具有 Ox 和 Oy 单独的缩放可能性 Oy 缩放工作正常
  • 如何使用 dc.js 或 d3.js 为行图添加轴标签

    对于条形图和堆积图 我们可以使用 xAxisLabel X Axis Label and yAxisLabel Y Axis Label 为各个轴添加标签的函数 但 有没有办法为行图添加轴标签 尝试这样的事情 dc renderAll fu
  • 如何将所有后代节点和链接设置为与 2 级祖先相同的颜色?

    我有一个 d3 js 树 其后代节点接收其 2 级祖先的节点颜色 这在级别 2 到级别 3 之间有效 但在级别 4 及以上级别停止工作 相关代码 var colourScale d3 scale ordinal domain MD Prof
  • 使用 pandas“to_csv”防止尾随零

    我正在尝试将 CSV 字符串导出到 D3 Web 应用程序 但是命令to csv坚持在数据中添加尾随 0 这会妨碍 D3 的正确使用 这是一个说明问题的最小示例 我的 简化的 数据框是 gt gt gt df pd DataFrame Al
  • d3:力向图:节点过滤

    我正在浏览以下帖子 突出显示选定的节点 https stackoverflow com questions 8739072 highlight selected node its links and its children in a d3
  • svg:如何在计算线上设置一个圆?

    我试图用 svg 在计算线上设置一个圆 这是我的例子 http jsfiddle net 7XC9j http jsfiddle net 7XC9j html
  • Svg getCompulatedTextLength 函数始终返回零

    你好 我尝试集成这个 d3 可缩放树形图 http mbostock github io d3 talk 20111018 treemap html http mbostock github io d3 talk 20111018 tree
  • d3-sankey 链接在拖动事件时未更新

    问题一 我无法更新拖动事件上的 d3 sankey 链接 我正在尝试复制与此类似的 d3 垂直和水平拖动事件 https bl ocks org d3noob 5028304 https bl ocks org d3noob 5028304
  • 使用时间序列数据和scaleBand指定D3条形图上的刻度

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

随机推荐

  • 在 IntelliJ IDEA 中编辑并继续?

    使用 IntelliJ IDEA 社区版进行调试时是否可以编辑一些代码 我在选项中找不到这个功能 是的 这就是所谓的 热插拔 您可以在调试过程中编译修改后的代码 并且类文件将被替换 直到您停止调试 确保在调试器设置中启用 HotSwap 选
  • 如何仅在客户端渲染 NextJS 13 中的组件

    我目前正在开发一个项目 该项目要求我的组件对客户端频繁变化的条件做出反应 但据我所知 NextJS 13 似乎强制服务器端渲染 我尝试使用动态加载import dynamic from next dynamic and const Comp
  • 克隆在幕后是如何工作的?

    克隆不会调用对象构造函数来创建对象的副本 那么clone使用什么算法呢 我正在寻找本机方法克隆的实现细节 任何指示将不胜感激 请注意 我知道克隆的缺点 protected native Object clone 我不太清楚 我需要查看本机代
  • VS2015 代码覆盖率不适用于 ASP.NET Core 1.0(以前称为 ASP.NET 5)中的测试

    我有一个 ASP NET Core 1 0 以前称为 ASP NET 5 解决方案 其中包含几个类库 包 和一个 ASP NET MVC6 项目 我有一个使用支持 Core 1 0 的新 XUnit 2 0 的测试库 然而 由于某种原因 当
  • 为什么纯虚拟析构函数的实现必须为空?它应该是内联的吗?

    我在其他线程中读到 当您实现纯虚拟析构函数 是的 它可以有一个实现 时 它必须是空的 并且应该 是内联的 应该是空的吗 如果是这样 为什么 应该内联吗 如果是这样 为什么 编辑 这就是纯虚拟析构函数的实现方式 class A virtual
  • Jackson 库代码中出现错误

    我们使用 dropwizard 版本 0 6 3 当我们尝试升级版本 0 7 0 时 我们在服务启动时收到此错误 线程 主 java lang VerifyError中的异常 类com fasterxml jackson module af
  • @deprecated 的 mergeLatest 重构 - 不再支持 resultSelector,而是通过管道传输到映射吗?

    角度材料文档应用程序包含以下代码片段 Combine params from all of the path into a single object this params combineLatest this route pathFro
  • 我应该将 TeamCity 的 VCS 根指向哪里?

    我正在设置 TeamCity 我想知道应该使用什么作为 VCS 根 我的 svn 存储库位于http obfuscatedserver svn main MyProject1 http obfuscatedserver svn main M
  • 无法为从图中加载的张量变量赋值

    我已经训练了一个模型并保存了它 现在 我试图了解权重扰动如何影响其准确性 因此我需要修改权重变量中保存的值 本质上会为其添加一些噪声 问题是加载它们后我无法为它们分配值 我正在使用 TensorFlow 版本 1 2 1 来训练和加载模型
  • Elm - 将消息转换为 Cmd 消息

    我正在尝试修改一个简单的应用程序elm lang 教程 https guide elm lang org architecture effects http html首先更新模型 然后触发另一次更新 update msg model cas
  • 如何看到Visual Studio 2008构建命令行?

    当我在 Visual Studio 中时 我按 F5 进行构建 有没有办法查看 MSBUILD 命令行正在执行 在 Visual Build Pro 内部 构建失败 但从 Visual Studio 2008 运行 按 F5 时 构建成功
  • nodejs module.js:340 错误: 找不到模块

    我将nodejs安装在C Program Files x86 nodejs 然后我创建了一个 js 文件并将其保存在桌面中 以便在控制台中输出 hello world console log hello world 当我尝试从命令提示符运行
  • iOS:如何使用 CGLayer 支持 Retina 显示屏?

    我正在 CALayer 的委托方法中绘制图表drawLayer inContext 现在我想支持 Retina Display 因为图形在最新设备上看起来很模糊 对于直接在 CALayer 传递的图形上下文上绘制的部分 我可以通过如下设置
  • PHP最左边的数字

    假设我有一个包含整数或浮点数的变量 因为在 PHP 中整数可能会溢出到浮点数 我想运行一些操作来获取最左边的数字和其余的剩余数字 为了更好地解释 现在 我知道如果将数字表示为字符串 有多种方法可以做到这一点 但我试图避免将其类型转换为字符串
  • JDK 11/JavaFX:如何在没有构建/依赖管理的情况下制作胖罐子?

    我认为不用说 我应该能够使用 Oracle 自己的 JDK 和 JavaFX 来自 gluonhq 来构建用户可以使用的可分发 jar 文件 经过详尽的搜索 大量阅读 过去几个月 24 小时或更长时间 最后是这个 Google 搜索查询 h
  • 为什么这个 IA32 汇编代码有 3 个 leaal 指令?

    我编译了这个C函数 int calc int x int y int z return x 3 y 19 z 我在 calc s 中得到了这个 我正在注释正在发生的事情 file calc c text globl calc type ca
  • 如何在 asp:TextBox 的 keyup 事件上调用 javascript 函数

    如何在asp net的TextBox控件的keyup事件上调用javascript函数 我正在尝试类似的事情 但它不起作用
  • jq:从嵌套对象中选择键的子集

    Input success true results a b c 鉴于我想保留所需的输出b success true results b 我尝试过的事情 jq del select results b not success true re
  • 使用vim,如何快速刷新正在处理的网页?

    我已经使用 VIM 几个星期了 同时处理各种网络语言 我真的很喜欢它 我发现必须点击或单击浏览器并刷新页面才能看到代码更改的效果 这很麻烦 更烦人的是 因为我使用的是 Virtual Box 而且我倾向于在主机系统上处理 PDF 文件 因此
  • 具有负值的条形图

    我需要创建一个可以有负值的 d3 条形图 理想情况下 零轴位置应根据数据的范围来计算 但我会选择一个假设对称正负范围的解决方案 即它始终位于图表的中间 这是我想要实现的目标的示例 好吧 假设您有一个数字数组作为数据集 其中包括一些正值和负值