[英]How to use more than one related dataset?
我有幾個相關的json數據文件。 在不給專有數據太多信息的情況下,並使它變得簡單...
假設有一個json文件"businesses"
描述了企業,其功能包括其名稱,地址等以及唯一的ID。 這個數字成千上萬。
然后,另一個json文件"ratings"
將客戶指定的業務的評級定為1-5,並以唯一的客戶ID和業務ID作為關鍵字。 所有的評分都對應於"businesses"
中的"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
。
有任何想法嗎? 請記住,我是新手,所以我犯了很多愚蠢的錯誤。 我也很困 謝謝。
由於我不知道您的businesses
和ratings
數組的結構,因此我不確定您的getBizName
函數出了什么問題,但是通常來說,該技術可以正常工作。
請參見此處的示例(將鼠標懸停在條形圖上顯示公司名稱): http : //jsfiddle.net/n1qnyv9u/
如果name
在businesses
陣列中更深的地方,則可能是錯誤地訪問了它。
編輯:由於您說businesses
通常是一個大型數據集,並且ratings
要小得多,因此您可能希望使用array.map
更新ratings
以提前包括name
。 這樣,您getBizName
每次將ratings
欄懸停在上方時都調用getBizName
。
在獲得businesses
和ratings
的數據之后,請執行以下操作:
ratings.map(function(a) {
a.business_name=getBizName(a.bid);
return a;
}
);
現在, ratings
包括business_name
。 構造title元素時,只需使用如下的business_name
:
.append("title").text(function(d) { return d.business_name; });
在這里更新小提琴: http : //jsfiddle.net/n1qnyv9u/2/
您可能還希望查看https://github.com/Caged/d3-tip以獲得更好看的工具提示。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.