var margin = {top: 20, right: 20, bottom: 30, left: 40},
width = 180 - margin.left - margin.right,
height = 200 - margin.top - margin.bottom;
function scaleChart(data) {
var x = d3.scale.ordinal()
.rangeRoundBands([0, width], .1);
var y = d3.scale.linear()
.range([height, 0]);
var xAxis = d3.svg.axis()
.scale(x)
.orient("bottom");
var yAxis = d3.svg.axis()
.scale(y)
.orient("left")
.ticks(10, "%");
x.domain(data.map(function(d) {
return d.name; }));
y.domain([0, d3.max(data, function(d) {
return d.amt;
})]);
return {x:x, y:y, xAxis: xAxis, yAxis: yAxis};
}
function initChart(element, data) {
var chart = scaleChart(data);
var svg = d3.select(element).append("svg")
.attr("width", width + margin.left + margin.right)
.attr("height", height + margin.top + margin.bottom)
.append("g")
.attr("transform", "translate(" + margin.left + "," + margin.top + ")");
svg.append("g")
.attr("class", "x axis")
.attr("transform", "translate(0," + height + ")")
.call(chart.xAxis);
svg.selectAll(".bar")
.data(data)
.enter().append("rect")
.attr("class", "bar")
.attr("x", function(d) {
return chart.x(d.name);
})
.attr("width", chart.x.rangeBand())
.attr("y", function(d) { return chart.y(d.amt); })
.attr("height", function(d) {
return height - chart.y(d.amt);
});
return svg;
}
function updateChart(data, svg) {
var chart = scaleChart(data);
svg.selectAll(".bar")
.data(data)
.attr("y", function(d) { return chart.y(d.amt); })
.attr("height", function(d) {
return height - chart.y(d.amt);
});
}
var partData = [
{
name: "IRF10",
maxRatings:
{
vds: 200,
vgs: 20,
id: 2.1,
pd: 36
},
impedanceGraph:
[
{name: 1, amt: 0.7},
{name: 2, amt: 1.6},
{name: 3, amt: 2.0},
{name: 4, amt: 2.0},
{name: 5, amt: 0.5}
]
},
{
name: "2n7000",
maxRatings:
{
vds: 60,
vgs: 20,
id: 0.2,
pd: 0.4
},
impedanceGraph:
[
{name: 1, amt: 0.6},
{name: 2, amt: 1.5},
{name: 3, amt: 1.9},
{name: 4, amt: 2.4}
]
}
]
$.views.tags("barChart", {
init: function(tagCtx, linkCtx) {
this.data = tagCtx.args[0];
this.svg = initChart(linkCtx.elem, this.data);
},
onAfterLink: function(tagCtx, linkCtx) {
var tag = this;
$.observable(tag.data).observeAll(function() {
updateChart(tag.data, tag.svg);
});
}
});
var tmpl = $.templates("#partTemplate");
tmpl.link('#container', partData);
li {
list-style:none
}
.bar {
fill: steelblue;
}
.bar:hover {
fill: brown;
}
.axis {
font: 10px sans-serif;
}
.axis path,
.axis line {
fill: none;
stroke: #000;
shape-rendering: crispEdges;
}
.x.axis path {
display: none;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.4.11/d3.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="//www.jsviews.com/download/jsviews.js"></script>
<script id="partTemplate" type="text/x-jsrender">
<div style="background-color:mintcream">
<h2>{{>name}}</h2>
Max Ratings
<ul>
{{props maxRatings}}
<li>{{>key}}: {{>prop}}</li>
{{/props}}
</ul>
<br />
Impedance Graph: <br />
<ul>
{{for impedanceGraph}}
<li><input data-link="amt" /></li>
{{/for}}
</ul>
<div class="chart" data-link="{barChart impedanceGraph}"></div>
</div>
</script>
<div id="container"></div>