我真的不明白你想要什麼,但你可以在d3.js網站(http://d3js.org/)找到很多例子和文檔。
編輯:
你可以做這樣的事情(我只是硬編碼的數據,但它很容易適應):
HTML:
<svg id="visualisation" width="1000" height="500"></svg>
JS:
var dataC = [{
'x': 'p1',
'y': 5
}, {
'x': 'p2',
'y': 20
}, {
'x': 'p3',
'y': 10
}, {
'x': 'p4',
'y': 40
}, {
'x': 'p5',
'y': 5
}, {
'x': 'p6',
'y': 60
}];
InitChart(dataC);
function InitChart(barData, child) {
var vis = d3.select('#visualisation'),
WIDTH = 500,
HEIGHT = 500,
MARGINS = {
top: 20,
right: 20,
bottom: 20,
left: 50
},
xRange = d3.scale.ordinal().rangeRoundBands([MARGINS.left, WIDTH - MARGINS.right], 0.1).domain(barData.map(function (d) {
return d.x;
})),
yRange = d3.scale.linear().range([HEIGHT - MARGINS.top, MARGINS.bottom]).domain([0,
d3.max(barData, function (d) {
return d.y;
})
]),
xAxis = d3.svg.axis()
.scale(xRange)
.tickSize(5)
.tickSubdivide(true),
yAxis = d3.svg.axis()
.scale(yRange)
.tickSize(5)
.orient("left")
.tickSubdivide(true);
vis.append('svg:g')
.attr('class', 'x axis')
.attr('transform', 'translate(0,' + (HEIGHT - MARGINS.bottom) + ')')
.call(xAxis);
vis.append('svg:g')
.attr('class', 'y axis')
.attr('transform', 'translate(' + (MARGINS.left) + ',0)')
.call(yAxis);
vis.selectAll('rect')
.data(barData)
.enter()
.append('rect')
.attr('x', function (d) {
return xRange(d.x);
})
.attr('y', function (d) {
return yRange(d.y);
})
.attr('width', xRange.rangeBand())
.attr('height', function (d) {
return ((HEIGHT - MARGINS.bottom) - yRange(d.y));
})
.attr('fill', 'grey')
.on('mouseover',function(d){
d3.select(this)
.attr('fill','blue');
})
.on('mouseout',function(d){
d3.select(this)
.attr('fill','grey');
})
.on('click',function(d){
d3.selectAll("svg > *").remove();
child ? InitChart(dataC) : InitChart([d], true);
});
}
css:
.axis path, .axis line
{
fill: none;
stroke: #777;
shape-rendering: crispEdges;
}
.axis text
{
font-family: 'Arial';
font-size: 13px;
}
.tick
{
stroke-dasharray: 1, 2;
}
.bar
{
fill: FireBrick;
}
here a jsfiddle