首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在d3.js中在一定范围内隐藏轴刻度值

问在d3.js中在一定范围内隐藏轴刻度值
EN

Stack Overflow用户
提问于 2018-01-05 11:08:59
回答 2查看 1.7K关注 0票数 1

我正在寻找一种隐藏D3.js中某个范围内的轴勾值的方法。例如,假设我的y轴显示从0到100之间的值,显示其中的每20个值(0、20、40、60、80、100)。现在,如何隐藏某些滴答值以避免出现?因此,如果我想隐藏值60和80,轴将只显示0,20,40,100。

让我解释一下为什么会出现这个问题。我问了另一个question关于如何创建一个破碎的y轴。我收到的答案是在y轴的范围和域上添加中点,这是真正有效的。但是,当您添加中间点而不显式地指定滴答值时,就会在这个中间点上产生混乱,因为所有隐藏的滴答值现在都出现在同一个位置。

下面是它的截图:

​

​

解决这个问题的方法是隐藏位于中点范围内的滴答值。有一个类似的question,但在C3.js中。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-01-05 12:01:53

嗯,我是the answer的作者,在你所链接的问题中。在your answer中,我不太喜欢的是它并不是真正的动态的。你打算如何计算value1和value2

我想提出的方法,这是真正的动态,是使用scale.invert来获取滴答,简单地使用范围。

让我们看看。这里有一个简单的断轴,滴答声堆积在一起:

​

代码语言:javascript
复制
var w = 560,
  h = 100;
var svg = d3.select("body")
  .append("svg")
  .attr("width", w + 40)
  .attr("height", h)
  .append("g")
  .attr("transform", "translate(10,0)");
var scale = d3.scaleLinear()
  .domain([0, 20, 800, 1000])
  .range([0, w / 2, w / 2, w]);
var axis = d3.axisBottom(scale)(svg.append("g").attr("transform", "translate(0,50)"));
代码语言:javascript
复制
<script src="https://d3js.org/d3.v4.js"></script>

​

我要做的只是根据范围填充一个数组。例如,在范围的每10%获得值,从0%到100%:

代码语言:javascript
复制
var tickValuesArray = d3.range(11).map(function(d) {
  return ~~scale.invert(w * (d / 10))
}); 

然后,我使用它来设置tickValues

​

代码语言:javascript
复制
var w = 560,
  h = 100;
var svg = d3.select("body")
  .append("svg")
  .attr("width", w + 40)
  .attr("height", h)
  .append("g")
  .attr("transform", "translate(10,0)");
var scale = d3.scaleLinear()
  .domain([0, 20, 800, 1000])
  .range([0, w / 2 , w / 2, w]);
var tickValuesArray = d3.range(11).map(function(d) {
  return ~~scale.invert(w * (d / 10))
});
var axis = d3.axisBottom(scale).tickValues(tickValuesArray)(svg.append("g").attr("transform", "translate(0,50)"));
代码语言:javascript
复制
<script src="https://d3js.org/d3.v4.js"></script>

​

票数 2
EN

Stack Overflow用户

发布于 2018-01-05 11:29:43

我从这个question的一个答案中找到了解决方案。

有一种方法可以删除不必要的滴答值:

代码语言:javascript
复制
g.selectAll(".tick")
.each(function (d, i) {
    if ( d > value1 && d < value2 ) {
        this.remove();
    }
});
票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48112358

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档