xxxxxxxxxx
<head>
<meta charset="utf-8">
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.5.5/d3.min.js"></script>
<style>
body {
font-family: 'Lucida Grande', 'Lucida Sans Unicode', Arial, Helvetica, "Helvetica Neue", Helvetica, sans-serif;
margin: 30px auto;
width: 960px;
position: relative;
}
header {
padding: 6px 0;
}
.group {
margin-bottom: 1em;
}
.axis {
font: 10px sans-serif;
position: fixed;
pointer-events: none;
z-index: 2;
}
.axis text {
-webkit-transition: fill-opacity 250ms linear;
font-family: 'Lucida Grande', 'Lucida Sans Unicode', Arial, Helvetica, "Helvetica Neue", Helvetica, sans-serif;
}
.axis path {
display: none;
}
.axis line {
stroke: #000;
shape-rendering: crispEdges;
}
.axis.top {
background-image: linear-gradient(top, #fff 0%, rgba(255,255,255,0) 100%);
background-image: -o-linear-gradient(top, #fff 0%, rgba(255,255,255,0) 100%);
background-image: -moz-linear-gradient(top, #fff 0%, rgba(255,255,255,0) 100%);
background-image: -webkit-linear-gradient(top, #fff 0%, rgba(255,255,255,0) 100%);
background-image: -ms-linear-gradient(top, #fff 0%, rgba(255,255,255,0) 100%);
top: 0px;
padding: 0 0 24px 0;
}
.axis.bottom {
background-image: linear-gradient(bottom, #fff 0%, rgba(255,255,255,0) 100%);
background-image: -o-linear-gradient(bottom, #fff 0%, rgba(255,255,255,0) 100%);
background-image: -moz-linear-gradient(bottom, #fff 0%, rgba(255,255,255,0) 100%);
background-image: -webkit-linear-gradient(bottom, #fff 0%, rgba(255,255,255,0) 100%);
background-image: -ms-linear-gradient(bottom, #fff 0%, rgba(255,255,255,0) 100%);
bottom: 0px;
padding: 24px 0 0 0;
}
.horizon {
border-bottom: solid 1px #000;
overflow: hidden;
position: relative;
}
.horizon {
border-top: solid 1px #000;
border-bottom: solid 1px #000;
}
.horizon + .horizon {
border-top: none;
}
.horizon canvas {
display: block;
}
.horizon .title,
.horizon .value {
bottom: 0;
line-height: 30px;
margin: 0 6px;
position: absolute;
text-shadow: 0 1px 0 rgba(255,255,255,.5);
white-space: nowrap;
font-size: 12px;
}
.horizon .title {
left: 0;
}
.horizon .value {
right: 0;
}
.line {
background: #000;
z-index: 2;
}
</style>
</head>
<body id="demo">
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js" charset="utf-8"></script>
<script src="//d3js.org/d3.v3.min.js" charset="utf-8"></script>
<script src="cubism.js" charset="utf-8"></script>
<script>
var dF = new Date();
var compareToBaseline = 1,
showChangeInPercent = 1,
smoothen = 1,
width = 960;
d3.csv("data.csv",
function(error, data)
{
var time = _.map(data[0]['_time'],
function(d)
{
return new Date(d);
}
);
data = _.map(data,
function(d)
{
delete(d['_time']);
return d;
}
);
var timeScale = d3.time.scale().domain(d3.extent(time));
var context = cubism.context().serverDelay(0).step(60 * 60 * 24 * 1000 * (data.length / width)).size(width).stop();
d3.select("#demo").selectAll(".axis").data(["top","bottom"]).enter().append("div").attr("class",
function(d) { return d + " axis"; }).each(function(d) { d3.select(this).call(context.axis().ticks(12).orient(d)); });
d3.select("body").append("div")
.attr("class", "rule")
.call(context.rule());
context.on("focus", function(i) {
if (i > 100) {
d3.selectAll(".value").style({
"right": i == null ? null : context.size() - i + "px",
"left": null
});
} else {
d3.selectAll(".value").style({
"left": i == null ? null : i + "px",
"right": null
});
}
});
var stocks = _.keys(data[0]);
data = _.map(stocks, function(stockSymbol, i) {
var compare = +data[0][stockSymbol];
return _.map(d3.range(data.length), function(idx) {
return compareToBaseline ?
showChangeInPercent ? ((+data[idx][stockSymbol] - compare*0.0) / compare * compare) : (+data[idx][stockSymbol] - compare*0.0)
: +data[idx][stockSymbol];
})
});
function metric(name, values) {
var num = context.size();
console.log(num)
return context.metric(function(start, stop, step, callback) {
var data = _.map(d3.range(num), function(d) {
var value = values[0];
var idxCalculated = values.length / num * d;
var idx = Math.floor(idxCalculated);
if (d > 0) {
var i = d3.interpolateNumber(values[idx-1], values[idx]);
value = smoothen ? i(idxCalculated % 1) : values[idx]
}
return value;
})
callback(null, data);
}, name.substr(0));
};
var metrics = _.map(data, function(d, i) {
return metric(stocks[i], data[i]);
});
var stocks = _.keys(data[0]);
d3.select("body").selectAll(".horizon")
.data(metrics)
.enter().insert("div", ".bottom")
.attr("class", "horizon")
.call(context.horizon()
.mode("mirror")
.colors(["#E06C4C", "#EBA18F", "#F5D2CA", "#C0E2F0", "#7AC4E0", "#1DA4D1"])
.format(compareToBaseline ? showChangeInPercent ? d3.format("+,.3f") : d3.format("+,.2f") : d3.format(".2f")));
})
</script>
</body>
https://cdnjs.cloudflare.com/ajax/libs/d3/3.5.5/d3.min.js
https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js
https://d3js.org/d3.v3.min.js