2015-09-18 187 views
0

我是新的d3.js,我試圖做一個水平條形圖。D3水平條形圖

我不知道在哪裏放置一些變量或在數據集更改時動態計算。

這裏是我的代碼:

<style> 
 
    #xaxis .domain { 
 
    fill: none; 
 
    stroke: #d3d3d3; 
 
    } 
 
    #xaxis text, 
 
    #yaxis text { 
 
    font-size: 12px; 
 
    } 
 
</style> 
 

 
<div class="panel-body"> 
 
    <div id="chart"> 
 
    </div> 
 
</div> 
 

 
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.5.6/d3.min.js"></script> 
 

 
<script> 
 
    var w = 1224; 
 

 
    var categories = ["VI Jornadas de Actualización del Poder Judicial de la Ciudad Autónoma de Buenos Aires - Fuero PCyF", "VI Jornadas de Actualización del Poder Judicial de la Ciudad Autónoma de Buenos Aires - Fuero CAyT", "PRE-CONGRESO INTERNACIONAL: Una lectura de la Conv…nfancia y la Adolescencia. Puebla, México, 2014」 ", "Reforma del Código Penal", "Prostitución como tema de Política Pública", "Discapacidad: Derecho a un Trato Adecuado", "Jornada sobre Reforma y Proceso Penal", "Manipulaciones judiciales de los varones violentos…icación de sus tácticas (impedimento de contacto)", "Teorías de Género", "Taller de Trabajo para una Justicia con Perspectiva de Género - Protocolo C", "Delitos Informáticos y evidencia digital en el proceso penal", "Curso Matrimonio Igualitario y Familias Diversas: Cambios Legislativos y Desafíos Judiciales ", "Ley de Identidad de Género: Antecedentes e Impacto en la Justicia", "Violencia Simbólica y Violencia Mediática", "Mesa Redonda: Género y Derecho", "Encuentros por los 15 años del Centro de Formación Judicial: Transferencia de competencias"]; 
 
    var dollars = [328, 325, 95, 83, 65, 56, 55, 54, 53, 41, 37, 37, 36, 35, 34, 31] 
 

 

 
    var colors = ['#0000b4', '#0082ca', '#0094ff', '#0d4bcf', '#0066AE', '#074285', '#00187B', '#285964', '#405F83', '#416545', '#4D7069', '#6E9985', '#7EBC89', '#0283AF', '#79BCBF', '#99C19E']; 
 

 
    var grid = d3.range(25).map(function(i) { 
 
    return { 
 
     'x1': 0, 
 
     'y1': 0, 
 
     'x2': 0, 
 
     'y2': 480 
 
    }; 
 
    }); 
 

 
    var tickVals = grid.map(function(d, i) { 
 
    if (i > 0) { 
 
     return i * 10; 
 
    } else if (i === 0) { 
 
     return "100"; 
 
    } 
 
    }); 
 

 

 
    var xscale = d3.scale.linear() 
 
    .domain([0, d3.max(dollars, function(d) { 
 
     return d; 
 
    })]) 
 
    .range([0, w]); 
 

 

 
    var yscale = d3.scale.linear() 
 
    .domain([0, categories.length]) 
 
    .range([0, 480]); 
 

 
    var colorScale = d3.scale.quantize() 
 
    .domain([0, categories.length]) 
 
    .range(colors); 
 

 
    var canvas = d3.select('#chart') 
 
    .append('svg') 
 
    .attr({ 
 
     'width': w, 
 
     'height': 550 
 
    }); 
 

 
    var grids = canvas.append('g') 
 
    .attr('id', 'grid') 
 
    .attr('transform', 'translate(600,10)') 
 
    .selectAll('line') 
 
    .data(grid) 
 
    .enter() 
 
    .append('line') 
 
    .attr({ 
 
     'x1': function(d, i) { 
 
     return i * 30; 
 
     }, 
 
     'y1': function(d) { 
 
     return d.y1; 
 
     }, 
 
     'x2': function(d, i) { 
 
     return i * 30; 
 
     }, 
 
     'y2': function(d) { 
 
     return d.y2; 
 
     }, 
 
    }) 
 
    .style({ 
 
     'stroke': '#adadad', 
 
     'stroke-width': '1px' 
 
    }); 
 

 
    var xAxis = d3.svg.axis(); 
 
    xAxis 
 
    .orient('bottom') 
 
    .scale(xscale); 
 
    //.ticks(5); 
 
    // .tickValues(tickVals); 
 

 
    var yAxis = d3.svg.axis(); 
 
    yAxis 
 
    .orient('left') 
 
    .scale(yscale) 
 
    .tickSize(2) 
 
    .tickFormat(function(d, i) { 
 
     return categories[i]; 
 
    }) 
 
    .tickValues(d3.range(17)); 
 

 
    var y_xis = canvas.append('g') 
 
    .attr("transform", "translate(600,35)") 
 
    .attr('id', 'yaxis') 
 
    .call(yAxis); 
 

 
    var x_xis = canvas.append('g') 
 
    .attr("transform", "translate(600,500)") 
 
    .attr('id', 'xaxis') 
 
    .call(xAxis); 
 

 
    var chart = canvas.append('g') 
 
    .attr("transform", "translate(600,10)") 
 
    .attr('id', 'bars') 
 
    .selectAll('rect') 
 
    .data(dollars) 
 
    .enter() 
 
    .append('rect') 
 
    .attr('height', 19) 
 
    .attr({ 
 
     'x': 0, 
 
     'y': function(d, i) { 
 
     return yscale(i) + 19; 
 
     } 
 
    }) 
 
    .style('fill', function(d, i) { 
 
     return '#6AA6D6' 
 
    }) //colorScale(i); 
 
    .attr('width', function(d) { 
 
     return 0; 
 
    }); 
 

 

 
    var transit = d3.select("svg").selectAll("rect") 
 
    .data(dollars) 
 
    .transition() 
 
    .duration(1000) 
 
    .attr("width", function(d) { 
 
     return xscale(d); 
 
    }); 
 

 
    var transitext = d3.select('#bars') 
 
    .selectAll('text') 
 
    .data(dollars) 
 
    .enter() 
 
    .append('text') 
 
    .attr({ 
 
     'x': function(d) { 
 
     return xscale(d)/2.2; 
 
     }, 
 
     'y': function(d, i) { 
 
     return yscale(i) + 35; 
 
     } 
 
    }) 
 
    .text(function(d) { 
 
     return d; 
 
    }).style({ 
 
     'fill': '#ffff', 
 
     'font-size': '14px' 
 
    }); 
 
</script>

的陣列類別和美元變化對每個查詢。

希望比有人能幫助我。

謝謝!

+0

你能否解釋一下你到底想要什麼? – seaotternerd

+0

我認爲是規模,不知道爲了做到這一點動態放大規模。我會添加一個工作代碼,但它並不按我想要的方式工作。 x軸與矩形不同。 – user1252306

回答

0

在d3中,一箇中心概念是數據連接。正是通過這種連接,您可以將數據綁定到可視化文件,並在底層數據更改時保持可視化持久性。

你有什麼工作正常,但我猜你想知道如何使它動態。那麼你可以通過多次使用不同的底層數據調用「圖表定義代碼」來使其動態化。

你最終像下面這樣:

var data = dollars; // or whatever your core data is. 

function draw(data) { 
    // all the d3 code from your example. This is the chart definition. 
} 

// draw the first iteration of the chart 
draw(data); 

// data changes 
draw(data); 

// data changes 
draw(data); 

有意義嗎?

+0

如果你看到這個例子,第一個欄比規模還大,比例尺就是150,欄是328。我的意思是我沒有硬化一些變量,但不知道哪個...... – user1252306