Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript d3-如何根据周设置xAxis刻度的格式_Javascript_D3.js - Fatal编程技术网

Javascript d3-如何根据周设置xAxis刻度的格式

Javascript d3-如何根据周设置xAxis刻度的格式,javascript,d3.js,Javascript,D3.js,我有一张d3时间刻度图。此时,轴标记为每个数据对象呈现一个日期。例如,数据的范围可以是1天的数据、1个月2周的数据、5个月的数据甚至更多 理想情况下,我们希望根据数据显示带有周数的刻度-而不是像这样显示一年或一个月的周数:xAxis.tickFormat(d3.time.format(“%W”)例如,如果数据从7月15日开始,第一个刻度会显示“第1周”,然后是“第2周”,等等 如何使用基于时间的d3折线图实现这样的轴刻度?我是d3新手,几乎不知道如何做到这一点 我也在使用moment.js,因此

我有一张d3时间刻度图。此时,轴标记为每个数据对象呈现一个日期。例如,数据的范围可以是1天的数据、1个月2周的数据、5个月的数据甚至更多

理想情况下,我们希望根据数据显示带有周数的刻度-而不是像这样显示一年或一个月的周数:
xAxis.tickFormat(d3.time.format(“%W”)
例如,如果数据从7月15日开始,第一个刻度会显示“第1周”,然后是“第2周”,等等

如何使用基于时间的d3折线图实现这样的轴刻度?我是d3新手,几乎不知道如何做到这一点

我也在使用moment.js,因此在
xAxis.tickFormat
中,我尝试使用一个函数,该函数具有一些逻辑,根据日期返回不同的值,但这似乎很脆弱,不是“d3方式”。还尝试使用自定义时间格式化程序

或者,我们可以使用更简单的刻度-只显示带有
d3.time.format(%d-%b)
的月份和/或日期,但也有重复的刻度值,如“Feb…Feb…Feb…Feb…Feb…Mar…Mar…Mar…”。是否有防止出现重复值的方法

我尝试过限制蜱的数量,但这并没有达到预期效果。例如,如果我有
xAxis.ticks(5)
,则会出现3个ticks;如果我有
xAxis.ticks(2)
,情况也一样。如果将记号定义为1,则仅显示1个记号。这是怎么回事

任何帮助都将是最感激的!下面用2个数据集示例编写代码


路径{fill:#CCC;}
.line{填充:无;笔划:#000;笔划宽度:5px;}
var now=力矩();
var图表数据=[
{timestamp:moment(now).subtract(27,'days').format('DD-MMM-YY'),value:40},
{timestamp:moment(now).subtract(25,'days').format('DD-MMM-YY'),value:36},
{timestamp:moment(now).subtract(24,'days').format('DD-MMM-YY'),value:33},
{timestamp:moment(now).subtract(21,'days').format('DD-MMM-YY'),value:35},
{timestamp:moment(now).subtract(20,'days').format('DD-MMM-YY'),value:35},
{timestamp:moment(now).subtract(18,'days').format('DD-MMM-YY'),value:33},
{timestamp:moment(now).subtract(17,'days').format('DD-MMM-YY'),value:33},
{timestamp:moment(now).subtract(16,'days').format('DD-MMM-YY'),value:33},
{timestamp:moment(now).subtract(15,'days').format('DD-MMM-YY'),value:32},
{timestamp:moment(now).subtract(13,'days').format('DD-MMM-YY'),value:35},
{timestamp:moment(now).subtract(11,'days').format('DD-MMM-YY'),value:31},
{timestamp:moment(now).subtract(10,'days').format('DD-MMM-YY'),value:28},
{timestamp:moment(now).subtract(9,'days').format('DD-MMM-YY'),value:32},
{timestamp:moment(now).subtract(8,'days').format('DD-MMM-YY'),value:30},
{timestamp:moment(now).subtract(7,'days').format('DD-MMM-YY'),value:33},
{timestamp:moment(now).subtract(6,'days').format('DD-MMM-YY'),value:36}
];
//数据的日期范围可能较短,如1周或2周
//理想情况下,我们仍希望在轴上显示“第1、2、3、4周”等。
//或者显示日期
//var图表数据=[
//{timestamp:moment(now).subtract(27,'days').format('DD-MMM-YY'),value:40},
//{timestamp:moment(now).subtract(25,'days').format('DD-MMM-YY'),value:36},
//{timestamp:moment(now).subtract(24,'days').format('DD-MMM-YY'),value:33},
//{timestamp:moment(now).subtract(21,'days').format('DD-MMM-YY'),value:35},
//{timestamp:moment(now).subtract(20,'days').format('DD-MMM-YY'),value:35}
// ];
设lastObj=chartData[chartData.length-1];
设lastObjTimestamp=lastObj.timestamp;
让lastAndNow=时刻(lastObjTimestamp).diff(现在是“天”);
log('最后一个条目'+lastObjTimestamp+'和今天的差异:'+lastAndNow');
var chartWrapperDomId=‘图表容器’;
var chartDomId=‘chart’;
var chartWrapperWidth=document.getElementById(chartWrapperDomId).clientWidth;
var保证金=40;
var宽度=chartWrapperWidth-边距;
风险值高度=500-保证金*2;
var xMin=d3.time.format(“%d-%b-%y”).parse(图表数据[0]。时间戳);
var xMax=d3.time.format(“%d-%b-%y”).parse(chartData[chartData.length-1]。时间戳);
//设置x轴的比例
var xScale=d3.time.scale();
域([xMin,xMax]);
X刻度范围([0,宽度]);
var yScale=d3.scale.linear()
.范围([高度,0])
.nice();
console.log('no5',chartData[5]。时间戳)
var xAxis=d3.svg.axis()
.scale(xScale)
.orient('底部')
.tickFormat(d3.time.format(“%d-%b”);
//.tickFormat(d3.time.format('%b'))
//tickFormat(d3.time.format(“%W”);
//.蜱(5);
var yAxis=d3.svg.axis()
.刻度(yScale)
.东方(左);
var line=d3.svg.line()
.x(功能(d){
返回xScale(d.时间戳);
})
.y(功能(d){
返回Y刻度(d值);
});
var svg=d3.选择(“#”+chartDomId)
.attr('宽度',宽度+边距*2)
.attr('height',height+margin*2)
.append('g')
.attr('transform','translate('+margin+','+margin+'));
chartData.forEach(函数(d){
d、 timestamp=d3.time.format(“%d-%b-%y”).parse(d.timestamp);
d、 值=+d.值;
});
yScale.domain(d3.extent)(图表数据,函数(d){
返回d值;
}));
append('g')
.attr('class','axis x-axis')
.attr('transform','translate(0',+height+'))
.呼叫(xAxis);
append('g')
.attr('class','y轴')
.呼叫(yAxis)
.append('文本')
.attr('transform'、'rotate(-90'))
A.
var weekday = new Array(7);
weekday[0]=  'sunday';
weekday[1] = 'monday';
weekday[2] = 'tuesday';
weekday[3] = 'wednesday';
weekday[4] = 'thursday';
weekday[5] = 'friday';
weekday[6] = 'saturday';

var startDay = weekday[new Date(chartData[0].timestamp).getDay()];

var week = 1;
var xAxis = d3.svg.axis()
    .scale(xScale)
    .orient('bottom')
    .tickFormat(function() { return 'week ' + week++ })
    .ticks(d3.time[startDay]);
var tickLabels = ['Week 1', 'Week 2', 'Week 3', 'Week 4', 'Week 5'];

d3.svg.axis()
    .scale(x)
    .orient("bottom")
    .tickValues([0, 7, 14, 21, 28])
    .tickFormat(function(d, i) {
      return tickLabels[i]
    });