首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何防止滴答离响应式d3图表太近

如何防止滴答离响应式d3图表太近
EN

Stack Overflow用户
提问于 2016-02-25 04:08:35
回答 1查看 1.6K关注 0票数 2

我有一张带有折线图的图表。X轴是日期。该图表显示在移动设备和桌面浏览器上。因此,图表需要适当地缩放。该图表显示用户活动。当它们是新的时,在x轴上只有一个点。随着时间的推移,点的数量可能会变大。

我遇到的问题是控制x轴上的刻度数。在d3决定显示更少的刻度之前,这些点挤在一起太多了。我在想我怎样才能更好地控制这件事。

当我直接设置xaxis.ticks时,d3允许tick离得太近。当我设置xaxis.tickValues时,我必须做更多的数学运算,而不是控制点数。我想过使用tickPadding,但这也不起作用。

我还考虑使用d3.time.mondays来显示跨越很长一段时间的图表的周边界。但a)当只有少量的点,并且在足够长的一段时间内,它可能会遇到相同的基本问题时,这看起来并不好。

那么,我如何防止滴答值变得如此接近,通常和具体针对日期?

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2016-03-02 04:27:06

我使用的技巧仍然是手动设置刻度数,这取决于窗口的宽度。

而且,对于少量的数据点,确保轴仍然显示全天,因为它在可视化中看起来更好(我觉得):

代码语言:javascript
复制
var dataExtendedDates = dataFeverGraph.slice(0);
dataExtendedDates.unshift({
    temperature: 0, 
    date: dataFeverGraph[0].date.substr(0,10) + ' 00:00:00'
});
dataExtendedDates.push({
    temperature: 0, 
    date: dataFeverGraph[dataFeverGraph.length-1].date.substr(0,10) + ' 23:59:59'
});

假设我在dataFeverGraph变量中有一组{temperature,date}形式的数据。我对它进行切片(以创建一个克隆),添加第一个日期的午夜作为第一个元素(假设dataFeverGraph具有按日期排序的对象,升序),并将最后一个日期的23:59作为最后一个元素。我将对所有常规操作使用dataFeverGraph数据集,如创建直线、将圆作为数据点的点等;但我将对轴使用dataExtendedDates。

因此,使用dataExtendedDates设置x轴:

代码语言:javascript
复制
var xScale = d3.time.scale()
        .range([0,width])
        .domain(d3.extent(dataExtendedDates, function(d) { 
              return formatDate.parse(d.date); }));

现在,根据宽度限制x轴上的刻度数:

代码语言:javascript
复制
var createXaxis = d3.svg.axis()
        .scale(xScale)
        .orient('bottom')
        .ticks(Math.max(width/50,2));

因此,ticks(Math.max(Math.max/50,2))应该可以做到这一点。当然,这假设您最初是根据窗口的实际宽度来设置宽度的,例如:

代码语言:javascript
复制
var margin = { top: 20, right: 30, bottom: 40, left:50 };
var height = 300 - margin.top - margin.bottom;
var width = document.getElementById("temperature_chart").clientWidth - margin.left - margin.right;

它还没有“响应性”,但它应该会在初始渲染时创建一个更好看的x轴。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35612030

复制
相关文章

相似问题

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