2014-02-06 49 views
0

我是D3的新手,所以我的D3項目對我來說是一個粗略的問題,我確實需要一些幫助,我一直在尋找幾天的搜索解決方案。生成具有指定父值的佈局直方圖

問題是,我想畫一個分層條形圖,每次點擊一個條時,就會顯示該條的子佈局,就像這個http://bl.ocks.org/mbostock/1283663一樣,但是,父節點的值是總和值其子節點。我想自己設置父值並保持佈局。 JSON文件是:

{ 
    "name": "flare", 
    "children": [ 
    { 
     "name": "analytics", 
     "children": [ 
     { 
      "name": "cluster", 
      "children": [ 
       {"name": "AgglomerativeCluster", "size": 3938}, 
       {"name": "CommunityStructure", "size": 3812}, 
       {"name": "HierarchicalCluster", "size": 6714}, 
       {"name": "MergeEdge", "size": 743} 
      ] 
     }, 

我想編輯父價值,所以我編輯該文件:

{ 
    "name": "flare", 
    "children": [ 
    { 
     "name": "analytics",size:555555 //I want to set value by myself rather than the sum of children value 
     "children": [ 
     { 
      "name": "cluster", 
      "children": [ 
       {"name": "AgglomerativeCluster", "size": 3938}, 
       {"name": "CommunityStructure", "size": 3812}, 
       {"name": "HierarchicalCluster", "size": 6714}, 
       {"name": "MergeEdge", "size": 743} 
      ] 
    }, 

但是,這是行不通的。有誰知道如何設定父母的價值?我搜索了幾天並沒有得到任何東西,希望你能幫助我,我非常感謝你的幫助!

回答

0

使用父元素尺寸繪製條紋是否存在問題?如果是這樣,你應該縮放一切(比如說0到100),然後乘以一個常量來獲得合適的父值。畢竟,如果你編輯每個父母的價值,他們不一定會成比例。

這裏有一個大規模的例子:

編輯:(固定域)

var myscale = d3.scale.linear() 
       .domain([0, maxParentWidth]) 
       .range([0,y]); // .range([0,1]) is the default range 

這將擴大所有的「父母」的域0到最大父值的範圍[0,y],其中y是任何你想要的(即100)。假設您想要最大的父母欄爲300px。現在,你所要做的就是將這個縮放值乘以一個常數,在這種情況下,這是3.

+0

嗨,謝謝你的回答,你是對的,但我也希望當兒童元素顯示。這是我現在所處的情況:http://bl.ocks.org/mbostock/1283663,我想將父母的x軸欄設置爲100%,並對兒童的x軸執行相同的操作,此時最大值爲父母的價值是45000這是兒童的總和...我清楚..我非常感謝你的回答! – Yiwen

+0

好的,所以如果你希望在你點擊一個子元素時改變比例(以便轉換以100%離開最大的子元素),然後再創建一個具有[0,最大子元素寬度]的域的另一個比例, [0,100]或[0,1](後者是默認值)。 – royhowie

+0

下面是對d3縮放的解釋:https://github.com/mbostock/d3/wiki/Quantitative-Scales#wiki-linear_domain – royhowie