У меня есть несколько связанных файлов данных json. Не давая слишком много информации о проприетарных данных, и сделать ее простой ...Как использовать несколько связанных наборов данных?
Скажем, один файл json "businesses"
описывает предприятия с указанием их имени, адреса и т. Д. И уникального идентификатора. Это число в сотнях тысяч.
Затем еще один файл json "ratings"
имеет рейтинги 1-5 для предприятий, предоставленных клиентами, с помощью уникального идентификатора клиента и идентификатора бизнеса. Все рейтинги соответствуют предприятиям в "businesses"
(надеюсь). "ratings"
- это гораздо меньший файл, и на самом деле я использую только 1000 из десятков тысяч оценок, которые у меня есть.
У меня есть другие связанные файлы, но я просто ограничу их пока.
Скажем, я делаю какую-то диаграмму d3 рейтингов, такую как гистограмма, где каждая вертикальная панель представляет собой одно дело, а высота определяется их средним рейтингом.
Я хочу сделать так, чтобы, когда вы наводите курсор на панель, вы можете увидеть название компании, и, чтобы сделать это, я должен рисовать как с "businesses"
, так и с "ratings"
. Я видел примеры только с одним набором данных.
загружает два набора данных и присвоения каждого переменный:
(Обычно я проверить ошибки, но я удаление, что для простоты)
var businesses = [];
var ratings = [];
d3.json("data/business.json", function(json) {
businesses = json;
console.log(businesses);
});
d3.json("data/rating.json", function(json) {
ratings = json;
console.log(ratings);
});
Оба набора данных отображается в консоли. Я делаю прутья, что-то вроде этого:
var svg = d3.select("body")
.append("svg")
.attr("width", w)
.attr("height", h);
svg.selectAll("rect")
.data(ratings)
.enter()
.append("rect")
(more attribs for ht, width, fill, etc.)
Я могу показать бизнес-идентификатор:
.append("title").text(function(d) {return "" + d.business_id ;});
но это просто бессмысленная строка символов, цифр, знаков переноса и подчеркивания.
Как я могу наиболее эффективно вырвать имя предприятия, которое соответствует этому ID из массива предприятий?
Я попытался
.append("title").text(function(d) {return getBizName(d.business_id); });
который вызывает
var getBizName = function(bizId) {
var i;
for (i=0; i<businesses.length; i++) {
if (businesses[i].business_id==bizId) return businesses[i].name;
}
};
Это не работает. Я пробовал несколько подходов, и если я получу названия, чтобы они появились вообще, они сказали undefined
. Если я нахожу getBizName(some-valid-business-id)
в консоли, он говорит some-valid-business-id is not defined
.
Любые идеи? Имейте в виду, что я новичок в этом, поэтому я делаю много глупых ошибок. Я тоже сон. Благодарю.
Об этом вчера говорили: http://stackoverflow.com/questions/26128426/d3-how-to-dynamically-refresh-a-graph-by-changing-the-data-file-source/ –
Я не знаю, Посмотрите, как это будет работать для этого. Я не использую второй файл с одним и тем же типом данных. – punstress
Также пользователю не нужно нажимать ничего, чтобы увидеть заголовки. – punstress