2016-05-03 2 views
1

У меня возникли проблемы с доступом к последнему значению (строке) моего CSV, чтобы отобразить его при наведении в моей линейной диаграмме. Мне нужно значение, которое будет отображаться в виде текста, но также должно использоваться как координата Y для выравнивания с концом строки. Это то, что у меня есть. Первая часть работы, но не второй (между ///):Как отобразить последнее значение в линейной диаграмме

function mouseover(d) { 
d3.select(d.corporation.line).classed("corporation--hover", true); 
d.corporation.line.parentNode.appendChild(d.corporation.line); 
focus.attr("transform", "translate(" + x(d.date) + "," + y(d.value) + ")"); 
focus.select(".corpname").text(d.corporation.name); 
focus.select(".ranking").text(d.value); 
///// 
focus.append("text") 
.datum(function(d) { return {name: d.corporation.name, value: d.corporation.value[d.corporation.values.length - 1]}; }) 
.attr("transform", function(d) { return "translate(" + x(d.value.date) + "," + y(d.value.values) + ")"; }) 
.text(function(d) { return d.value; }); 
///// 
} 

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

шлепнуть здесь: http://plnkr.co/edit/1Nf992jYjSGyKhLhaij5?p=preview

Спасибо!

+0

похоже, что у вас есть противоречивое значение d. Тот, который вы передаете на мышь: mouseover (d) и тот, который вы используете в другом месте, например .datum (function (d) {... его непонятно, какое значение вы хотите использовать, но, возможно, это ваша проблема – thatOneGuy

+0

I я полностью потерял способ сделать это. Я попытался начать с нуля и очистить вещи, но по состоянию на данный момент я могу отображать значение зависания, и я не могу получить последнее (последнее) значение I хочу показать в конце строки. Если у кого есть время, я хотел бы понять, как заставить его работать. Вот чистый плунж: http://plnkr.co/edit/Qv47CGKKTQVmvxttj4Mc?p=preview спасибо ! –

+0

@CapivaraGraphics По последнему последнему значению вы можете сообщить нам, какая запись из csv. – SiddP

ответ

0

Вот как получить доступ к данным, связанные с вашей линии элемента: this.__data__

Во-первых, давайте создадим переменную для доступа к данным, а именно массив значений:

var that = this.__data__.corporation.values; 

Тогда мы можем получить дату и значение конца строки:

var thatLength = that.length; 
var thatValue = that[thatLength - 1].value; 
var thatDate = that[thatLength - 1].date; 

и отображения текста:

someLegend 
.attr("x", (x(yearFormat(thatDate))*-1)-90) 
.attr("y", y(thatValue)) 
.text(thatValue); 

Вот plunker: http://plnkr.co/edit/4HquzuJ6FJeZvEVWuUS5?p=preview

PS: Я создал эту переменную someLegend, потому что у меня не было времени, чтобы понять translate логику вашего focus.

+0

Спасибо Херардо, это хорошо работает. Позвольте мне изучить ваш ответ! –

+0

Не беспокойтесь, @CapivaraGraphics. Самое главное, что теперь у вас есть 'thisValue' для значения и' thisDate' для даты. Играя с этим .__ data__', вы можете получить любые данные, привязанные к элементу. Попробуйте 'console.log (это .__ данные __);' и вы увидите. –

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