2016-08-12 2 views
1

Я пытаюсь добавить линии сетки к задней части моей линейной диаграммы, однако линии сетки не заканчиваются в последней записи на оси х. См. Ниже plnk;Линии сетки d3.js висят над осью x?

http://plnkr.co/edit/j8qQ19m4l4jgdCsRu1da?p=preview

для справки, я искал что-то вроде этого;

enter image description here

Хотя, я не знаю, как легко было бы добавить пустую запись в оси х, чтобы подтолкнуть линейную диаграмму в середину.

В любом случае, я надеюсь, что кто-то сможет помочь с этим!

Благодаря


JS

var x = d3.time.scale() 
    .domain([new Date(2016, 0, 1), new Date(2016, 11, 31)]) 
    .range([0, width]); 

var y = d3.scale.linear() 
    .domain([0, 100]) 
    .range([height, 0]); 

var xAxis = d3.svg.axis() 
    .scale(x) 
    .orient("bottom") 
    .ticks(d3.time.months) 
    .tickFormat(d3.time.format("%B")) 
    .tickSize(-height, 0, 0) 
    .innerTickSize(-height) 
    .tickPadding(15) 

var yAxis = d3.svg.axis() 
    .scale(y) 
    .orient("left") 
    .innerTickSize(-width) 
    .outerTickSize(0) 
    .tickPadding(15) 
    .tickSize(-width, 0, 0) 

var line = d3.svg.line() 
    .x(function(d) { 
    return x(new Date(2016, moment(d.date, 'MMMM').format('M') - 1, 1)); 
    }) 
    .y(function(d) { 
    return y(d.close); 
    }); 

var svg = d3.select("body").append("svg") 
    .attr("width", width + margin.left + margin.right) 
    .attr("height", height + margin.top + margin.bottom) 
    .append("g") 
    .attr("transform", "translate(" + margin.left + "," + margin.top + ")"); 

d3.tsv("data.tsv", type, function(error, data) { 

    svg.append("g") 
    .attr("class", "x axis") 
    .attr("transform", "translate(0," + height + ")") 
    .call(xAxis) 

    svg.append("g") 
    .attr("class", "y axis") 
    .call(yAxis) 

    svg.append("path") 
    .data([data]) 
    .attr("class", "line") 
    .attr("d", line); 

}); 

function type(d) { 
    d.date = d.date; 
    d.close = +d.close; 
    return d; 
} 

TSV

date close 
January 50 
February 100 
March 75 
April 90 
May 85 
June 40 
July 30 
August 35 
September 12 
October 72 
November 77 
December 5 

ответ

2

Благодаря своим dates.You имеют следующие:

.domain([new Date(2016, 0, 1), new Date(2016, 11, 31)]) 

Это генерирует декабрьский тик, а затем остальное после того, как у вас есть значение в вашем TSV December 5. Если вы хотите вернуться в месяц, так сказать, просто изменить это за месяц до:

.domain([new Date(2016, 0, 1), new Date(2016, 10, 31)]) 

Обновлено Plnkr: http://plnkr.co/edit/vKlCFpBvDi097337HJyW?p=preview

+0

Одна маленькая вещь, должно было быть '.domain ([новый Дата (2016, 0, 1), новая дата (2016, 11, 1)]) ' Ноябрь имеет всего 30 дней: P – Cyril

+0

@ Кирилл Ха-ха-ха-ха, я пропустил этот: L – thatOneGuy

Смежные вопросы