javascript - 如何在 d3.js v4 中设置连续刻度(例如scaleLinear)的填充?

标签 javascript d3.js

我正在尝试在直方图中设置条形填充,其方式与您有序数刻度时的方式大致相同:

x = d3.scaleLinear()
    .domain([fist, last])
    .rangeRound([bottom, top])
    .padding(someFractionBetweenZeroAndOne)

不。那是行不通的。然后我前往API documentation连续尺度上没有 .padding 方法!

嗯,我可以手动计算条形宽度,但是真的没有可用于连续缩放的集成填充解决方案吗?

最佳答案

线性比例的填充没有意义!

但是,有几种替代方法可以向条形添加一些空间,例如使用组(如 Bostock 在 this example 中所做的那样)并以与邻居有一些空间的方式设置组内矩形的位置。

另一种选择是更改矩形的位置和尺寸(正如您所说,“手动计算我的条形宽度”)。例如,在此演示中,我将每个条形的宽度更改为每个 bin 宽度的 90%。

var data = [{x:0, y:10},
            {x:2, y:40},
            {x:4, y:70},
            {x:6, y:30},
            {x:8, y:20}];

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

var xScale = d3.scaleLinear()
  .domain([0, 10])
  .range([0, 300]);

var barWidth = xScale.domain()[1]/data.length;

var yScale = d3.scaleLinear()
  .domain([0, 80])
  .range([200, 0]);

var bars = svg.selectAll(".bars")
  .data(data)
  .enter()
  .append("rect");

bars.attr("x", function(d){ return xScale(d.x)})
  .attr("y", function(d){ return yScale(d.y)})
  .attr("width", function(d,i){ return xScale(barWidth) * 0.9})
  .attr("height", function(d){ return 200 - yScale(d.y)});
rect {
  fill: teal;
  }
<script src="https://d3js.org/d3.v4.min.js"></script>

关于javascript - 如何在 d3.js v4 中设置连续刻度(例如scaleLinear)的填充?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40179381/

相关文章:

javascript - 具有服务器端呈现的 HTML 片段的主干模型

javascript - SetTimeout - 为什么传递函数比传递字符串更好?

javascript - Polymer - 动态加载不同的组件

javascript - d3.js 在调整大小事件中缩放圆环图

javascript - 如何在 AngularJS 中显示/隐藏基于 "|filter"结果的 UI 组件?

javascript - 通过 php 加载时,JQuery UI 未检测到 CSS 样式

javascript - D3.js 更新条形图

javascript - D3 V4 TreeMap 报错“Uncaught Error : missing: Comedy-Musical

javascript - 如何将 svg 移动/平移到某个位置?

javascript - D3.js Focus+Context via Brushing Barchart - 重新计算刷牙时的 BarWidth