Javascript 最后一个勾号标签不出现在D3折线图中

Javascript 最后一个勾号标签不出现在D3折线图中,javascript,d3.js,data-visualization,linechart,Javascript,D3.js,Data Visualization,Linechart,我试图基于Mike Bostock的示例()编写一个通用的多行图表函数。 我面临的问题是,我的月度图表x轴上的最后一个刻度标签没有显示。最后一个记号在周线图x轴上显示良好 JS Fiddle链接: 我怀疑这里的问题可能是由于为x轴指定的范围由于某种原因忽略了最后一个值。但我不确定这里到底发生了什么。有人能帮我调试吗 这是我的密码: 函数renderMultiLineChart(数据文件、chartDiv、xAxisLabel、yAxisLabel、graphCadence){ var mar

我试图基于Mike Bostock的示例()编写一个通用的多行图表函数。 我面临的问题是,我的月度图表x轴上的最后一个刻度标签没有显示。最后一个记号在周线图x轴上显示良好

JS Fiddle链接:

我怀疑这里的问题可能是由于为x轴指定的范围由于某种原因忽略了最后一个值。但我不确定这里到底发生了什么。有人能帮我调试吗

这是我的密码:

函数renderMultiLineChart(数据文件、chartDiv、xAxisLabel、yAxisLabel、graphCadence){
var margin={顶部:20,右侧:60,底部:80,左侧:60},
宽度=760-边距.左-边距.右,
高度=400-margin.top-margin.bottom;
var parseDate=d3.timeParse(“%m/%d/%y”);
var x=d3.scaleUtc()
.范围([0,宽度]);
变量y=d3.scaleLinear()
.范围([高度,0]);
var color=d3.scaleOrdinal(d3.schemeCategory 10);
//var xAxis=d3.axisBottom(x).tickFormat(函数(d){return d.x;});
开关(图C){
个案“每日”:
var xAxis=d3.axisBottom(x).ticks(d3.timeDay.every(1)).tickFormat(d3.timeFormat(“%m/%d”))
打破
案例“每周”:
var xAxis=d3.axisBottom(x).ticks(d3.timeSaturday.every(1)).tickFormat(d3.timeFormat(“%m/%d”))
打破
个案“每月”:
//var xAxis=d3.axisBottom(x).ticks(d3.timeDay.every(1))
var xAxis=d3.axisBottom(x).ticks(d3.timeMonth.every(1)).tickFormat(d3.utcFormat(“%m/%d”))
打破
}
var yAxis=d3.轴左(y);
var line=d3.line()
.x(函数(d){返回x(d.date);})
.y(函数(d){返回y(d.count);})
var div=d3.select(chartDiv.append(“div”)
.attr(“类”、“工具提示”)
.样式(“不透明度”,0);
var svg=d3.select(chartDiv.append(“svg”)
.attr(“宽度”,宽度+边距。左侧+边距。右侧)
.attr(“高度”,高度+边距。顶部+边距。底部)
.附加(“g”)
.attr(“转换”、“平移”(+margin.left+)、“+margin.top+”);
//https://pharos-rest-service-iad.iad.proxy.amazon.com/s3/tool.csv
d3.csv(数据文件、函数(错误、数据){
color.domain(d3.keys(数据[0]).filter(函数(键){returnkey!==“date”});
data.forEach(函数(d){
//控制台日志(d);
d、 日期=解析日期(d.date);
});
var datapoints=color.domain().map(函数(名称){
返回{
姓名:姓名,,
值:data.map(函数(d){
返回{date:d.date,count:+d[name]};
})
};
});
控制台日志(数据);
x、 域(d3.extent(数据,函数(d){返回d.date;}));
y、 领域([
d3.min(数据点,函数(c){返回d3.min(c.values,函数(v){返回v.count;});}),
max(数据点,函数(c){返回d3.max(c.values,函数(v){返回v.count;});})
]);
svg.append(“g”)
.attr(“类”、“x轴”)
.attr(“变换”、“平移(0)”、“高度+”)
.呼叫(xAxis)
.selectAll(“文本”)
.attr(“dx”,“-.8em”)
.attr(“dy”,“.15em”)
.style(“文本锚定”、“结束”)
.attr(“变换”、“旋转(-45)”);
//x轴的文本标签
svg.append(“文本”)
.attr(“转换”,
“平移(“+(宽度/2)+”,“+
(高度+边距。顶部+30)+“)
.style(“文本锚定”、“中间”)
.文本(xAxisLabel);
svg.append(“g”)
.attr(“类”、“y轴”)
.呼叫(yAxis)
.append(“文本”)
.attr(“变换”、“旋转(-90)”)
.attr(“y”,6)
.attr(“dy”,“.71em”)
.style(“文本锚定”、“结束”)
.style(“填充”、“黑色”)//设置线条颜色
.文本(标签);
var datapoint=svg.selectAll(“.datapoint”)
.数据(数据点)
.enter().append(“g”)
.attr(“类”、“数据点”);
datapoint.append(“路径”)
.attr(“类”、“行”)
.attr(“d”,函数(d){返回行(d.values);})
.style(“笔划”,函数(d){返回颜色(d.name);});
j=-1;
数据点。选择全部(“圆圈”)
.data(函数(d){返回d.values})
.输入()
.附加(“圆圈”)
.attr(“r”,3)
.attr(“cx”,函数(d,i){返回x(d.date);})
.attr(“cy”,函数(d){返回y(d.count);})
.on(“鼠标悬停”,功能(d){
过渡部()
.持续时间(200)
.样式(“不透明”,1);
div.html(“+d.count+”)
.style(“左”,“d3.event.pageX)+“px”)
.style(“top”,(d3.event.pageY-28)+“px”);
})
.开启(“鼠标出”,功能(d){
过渡部()
.持续时间(500)
.样式(“不透明度”,0);
})
.style(“fill”,函数(d,i){if(i==0){j++};返回颜色(datapoints[j].name);});
变量legendRectSize=8;
var legendSpacing=80;
var legendHolder=svg.append('g')
//将支架平移到图表的右侧
.attr('transform',“translate”(+(100+边距.左+边距.右)+)”,“+(高度+边距.底部-20)+”)
变量图例=legendHolder.selectAll('.legend'))
.data(color.domain())
.输入()
.append('g')
.attr('类','图例')
.attr(“转换”,函数(d,i){
如果(i==0){
dataL=legendRectSize+legendSpacing
返回“翻译(0,0)”
}否则{
var newdataL=dataL
dataL+=legendRectSize+legendSpacing
返回“translate(“+(newdataL)+”,0)”
}
});
图例.append('rect')
.attr('width',legendRectSize)
.attr('height',legendRectSize)
.style('填充',颜色)
.风格(“笔画”、颜色);
图例.append('text')
.attr('x',legendRectSize+5)
.attr('y',legendRectSize)
.text(函数(d){return d;});
});
}
renderMultiLineChart(“https://gist.githubusercontent.com/techyogii/323024b01c1eb4d0c07637e183e1e6d7/raw/422ed207cc2c38426fa726795ecd963f153135dd/app_usage“,”部门#月度“,”快照日期“,”度量计数“,”月度“)
renderMultiLineChart(“https://gist.githubusercontent.com/techyogii/8ed38bdb3b8e