2014-08-04 16:19:26 +04:00
|
|
|
<!----------------------------------------------------------------->
|
|
|
|
<!-- AUTOMATICALLY GENERATED CODE - PLEASE EDIT TEMPLATE INSTEAD -->
|
|
|
|
<!----------------------------------------------------------------->
|
2015-07-10 19:18:03 +03:00
|
|
|
<!DOCTYPE html>
|
|
|
|
<meta charset="utf-8">
|
|
|
|
<html>
|
2014-08-04 16:19:26 +04:00
|
|
|
<div id="chartContainer">
|
|
|
|
<script src="/lib/d3.v3.4.8.js"></script>
|
2016-03-23 15:53:56 +03:00
|
|
|
<script src="/dist/dimple.v2.2.0.js"></script>
|
2014-08-04 16:19:26 +04:00
|
|
|
<script type="text/javascript">
|
|
|
|
var svg = dimple.newSvg("#chartContainer", 590, 400);
|
|
|
|
d3.tsv("/data/example_data.tsv", function (data) {
|
|
|
|
|
|
|
|
// Fill the SVG background
|
|
|
|
svg.append("rect")
|
2014-08-04 17:54:40 +04:00
|
|
|
.attr("x", "8px")
|
|
|
|
.attr("y", "8px")
|
2014-08-04 16:19:26 +04:00
|
|
|
.attr("width", "100%")
|
|
|
|
.attr("height", "100%")
|
|
|
|
.style("fill", "#2c3e50");
|
|
|
|
|
|
|
|
// Configure a simple bar chart
|
|
|
|
var myChart = new dimple.chart(svg, data),
|
|
|
|
xAxis = myChart.addCategoryAxis("x", "Owner"),
|
|
|
|
yAxis = myChart.addMeasureAxis("y", "Unit Sales"),
|
|
|
|
mySeries = myChart.addSeries("Owner", dimple.plot.bar);
|
|
|
|
|
|
|
|
// Draw without any axes
|
|
|
|
xAxis.hidden = true;
|
|
|
|
yAxis.hidden = true;
|
|
|
|
|
|
|
|
// Set small margins as there is going to be no axes displayed
|
2014-08-04 17:54:40 +04:00
|
|
|
myChart.setMargins(14, 18, 6, 10);
|
2014-08-04 16:19:26 +04:00
|
|
|
|
|
|
|
// Define a custom color palette. These colours are based on the excellent
|
|
|
|
// set at http://flatuicolors.com/
|
|
|
|
myChart.defaultColors = [
|
|
|
|
new dimple.color("#3498db", "#2980b9", 1), // blue
|
|
|
|
new dimple.color("#e74c3c", "#c0392b", 1), // red
|
|
|
|
new dimple.color("#2ecc71", "#27ae60", 1), // green
|
|
|
|
new dimple.color("#9b59b6", "#8e44ad", 1), // purple
|
|
|
|
new dimple.color("#e67e22", "#d35400", 1), // orange
|
|
|
|
new dimple.color("#f1c40f", "#f39c12", 1), // yellow
|
|
|
|
new dimple.color("#1abc9c", "#16a085", 1), // turquoise
|
|
|
|
new dimple.color("#95a5a6", "#7f8c8d", 1) // gray
|
|
|
|
];
|
|
|
|
|
|
|
|
// Set some custom display elements for each series shape
|
|
|
|
mySeries.afterDraw = function (s, d) {
|
|
|
|
|
|
|
|
// I've defined the width in terms of the golden ratio as it seems like the sort
|
|
|
|
// of thing a designer would do.
|
|
|
|
var shape = d3.select(s),
|
|
|
|
goldenRatio = 1.61803398875;
|
|
|
|
|
|
|
|
// Add a rectangle to the bar giving a nice style. The idea was borrowed
|
|
|
|
// from sirocco's question here:
|
|
|
|
// http://stackoverflow.com/questions/25044608/dimplejs-barchart-styling-columns
|
|
|
|
svg.append("rect")
|
|
|
|
.attr("x", shape.attr("x"))
|
|
|
|
.attr("y", shape.attr("y"))
|
|
|
|
.attr("height", shape.attr("height"))
|
|
|
|
.attr("width", (0.5 * shape.attr("width")) / goldenRatio)
|
|
|
|
.style("fill", shape.style("stroke"))
|
|
|
|
.style("opacity", 1)
|
|
|
|
.style("pointer-events", "none");
|
|
|
|
|
|
|
|
// Add some bar labels for the yValue
|
|
|
|
svg.append("text")
|
|
|
|
.attr("x", parseFloat(shape.attr("x")) + shape.attr("width") / 2)
|
|
|
|
.attr("y", parseFloat(shape.attr("y")) + (shape.attr("height") > 30 ? (shape.attr("height") / 2 + 8) : - 10))
|
|
|
|
.style("font-family", "courier new")
|
|
|
|
.style("text-anchor", "middle")
|
|
|
|
.style("font-size", "16px")
|
|
|
|
.style("fill", "#ecf0f1")
|
|
|
|
.style("pointer-events", "none")
|
|
|
|
.text(yAxis._getFormat()(d.yValue));
|
|
|
|
|
|
|
|
// Draw without a border
|
|
|
|
shape.attr("stroke", shape.attr("fill"));
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
// Override the standard tooltip behaviour
|
|
|
|
mySeries.addEventHandler("mouseover", function (e){
|
|
|
|
|
|
|
|
// Draw the text information in the top left corner
|
|
|
|
svg.selectAll(".dimple-hover-text")
|
|
|
|
.data([e.xValue, d3.format(",.f")(e.yValue)])
|
|
|
|
.enter()
|
|
|
|
.append("text")
|
|
|
|
.attr("class", "dimple-hover-text")
|
|
|
|
.attr("x", myChart._xPixels() + myChart._widthPixels() - 25)
|
|
|
|
.attr("y", function (d, i) { return myChart._yPixels() + 20 + i * 25; })
|
|
|
|
.style("font-family", "courier new")
|
|
|
|
.style("text-anchor", "end")
|
|
|
|
.style("font-size", "20px")
|
|
|
|
.style("fill", "#ecf0f1")
|
|
|
|
.style("pointer-events", "none")
|
|
|
|
.text(function (d) { return d; });
|
|
|
|
|
|
|
|
// Put a coloured bar next to the text for no good reason
|
|
|
|
svg.append("rect")
|
|
|
|
.attr("class", "dimple-hover-text")
|
|
|
|
.attr("x", myChart._xPixels() + myChart._widthPixels() - 15)
|
|
|
|
.attr("y", myChart._yPixels())
|
|
|
|
.attr("height", 60)
|
|
|
|
.attr("width", 10)
|
|
|
|
.style("fill", myChart.getColor(e.xValue).fill)
|
|
|
|
.style("opacity", 1)
|
|
|
|
.style("pointer-events", "none");
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
// Clear the text on exit
|
|
|
|
mySeries.addEventHandler("mouseleave", function (e) {
|
|
|
|
svg.selectAll(".dimple-hover-text").remove();
|
|
|
|
});
|
|
|
|
|
|
|
|
// Render everything
|
|
|
|
myChart.draw();
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
</script>
|
2015-07-10 19:18:03 +03:00
|
|
|
</div>
|
|
|
|
</html>
|