index.html
<!doctype HTML>
<meta charset = 'utf-8'>
<html>
<head>
<script src='//d3js.org/d3.v3.min.js' type='text/javascript'></script>
<script src='//dimplejs.org/dist/dimple.v2.1.0.min.js' type='text/javascript'></script>
<script src='//timelyportfolio.github.io/rCharts_dimple/js/d3-grid.js' type='text/javascript'></script>
<style>
.rChart {
display: block;
margin-left: auto;
margin-right: auto;
width: 800px;
height: 400px;
}
</style>
</head>
<body >
<div id = 'chart10748d4a35' class = 'rChart dimple'></div>
<script>
var chart10748d4a35 = (function() {
var opts = {
"dom": "chart10748d4a35",
"width": 800,
"height": 400,
"xAxis": {
"type": "addCategoryAxis",
"showPercent": false,
"orderRule": [ "deep", "muted", "pastel", "bright", "dark", "colorblind" ]
},
"yAxis": {
"type": "addCategoryAxis",
"showPercent": false
},
"zAxis": [],
"colorAxis": [],
"defaultColors": d3.scale.ordinal()
.range(['#4C72B0','#55A868','#C44E52','#8172B2','#CCB974','#64B5CD','#4878CF','#6ACC65','#D65F5F','#B47CC7','#C4AD66','#77BEDB','#92C6FF','#97F0AA','#FF9F9A','#D0BBFF','#FFFEA3','#B0E0E6','#003FFF','#03ED3A','#E8000B','#8A2BE2','#FFC400','#00D7FF','#001C7F','#017517','#8C0900','#7600A1','#B8860B','#006374','#0072B2','#009E73','#D55E00','#CC79A7','#F0E442','#56B4E9'])
.domain(['1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16','17','18','19','20','21','22','23','24','25','26','27','28','29','30','31','32','33','34','35','36'])
,
"layers": [],
"legend": [],
"x": "x",
"y": "y",
"groups": [ "x", "y" ],
"type": "bar",
"facet": {
"x": "x"
},
"id": "chart10748d4a35"
},
data = [{"x":"deep","y":"1"},{"x":"deep","y":"2"},{"x":"deep","y":"3"},{"x":"deep","y":"4"},{"x":"deep","y":"5"},{"x":"deep","y":"6"},{"x":"muted","y":"7"},{"x":"muted","y":"8"},{"x":"muted","y":"9"},{"x":"muted","y":"10"},{"x":"muted","y":"11"},{"x":"muted","y":"12"},{"x":"pastel","y":"13"},{"x":"pastel","y":"14"},{"x":"pastel","y":"15"},{"x":"pastel","y":"16"},{"x":"pastel","y":"17"},{"x":"pastel","y":"18"},{"x":"bright","y":"19"},{"x":"bright","y":"20"},{"x":"bright","y":"21"},{"x":"bright","y":"22"},{"x":"bright","y":"23"},{"x":"bright","y":"24"},{"x":"dark","y":"25"},{"x":"dark","y":"26"},{"x":"dark","y":"27"},{"x":"dark","y":"28"},{"x":"dark","y":"29"},{"x":"dark","y":"30"},{"x":"colorblind","y":"31"},{"x":"colorblind","y":"32"},{"x":"colorblind","y":"33"},{"x":"colorblind","y":"34"},{"x":"colorblind","y":"35"},{"x":"colorblind","y":"36"}];
return drawChart(opts,data);
function drawChart(opts, data){
var subCharts = [];
var c = null;
var assignedColors = {};
if(opts.defaultColors.length) {
defaultColorsArray = [];
if (typeof(opts.defaultColors) == "function") {
if( opts.defaultColors.domain().length > 0 ){
defaultColorsArray = opts.defaultColors.range();
opts.defaultColors.domain().forEach( function( d, i ) {
assignedColors[d] = new dimple.color(opts.defaultColors.range()[i])
})
} else {
for (var n=0;n<opts.defaultColors.range().length;n++) {
defaultColorsArray.push(opts.defaultColors(n));
};
}
} else {
defaultColorsArray = opts.defaultColors;
}
if (!(Object.keys(assignedColors).length) & Boolean(opts.groups)) {
opts.groups = (typeof opts.groups == "string") ? [opts.groups] : opts.groups;
d3.set(
data.map(function(d){
return d[opts.groups[opts.groups.length-1]]
})
).values().forEach(function(u,i){
assignedColors[u] = new dimple.color(defaultColorsArray[i % defaultColorsArray.length])
})
}
}
function buildSeries(layer, hidden, myChart){
if (!layer.xAxis) layer.xAxis = opts.xAxis;
if (!layer.yAxis) layer.yAxis = opts.yAxis;
if (!layer.zAxis) layer.zAxis = opts.zAxis;
var x = buildAxis("x", layer, myChart);
x.hidden = hidden;
var y = buildAxis("y", layer, myChart);
y.hidden = hidden;
var z = null;
if (!(typeof(layer.zAxis) === 'undefined') && layer.zAxis.type){
z = buildAxis("z", layer, myChart);
};
var s = new dimple.series(myChart, null, x, y, z, c, null ,dimple.plot[layer.type], dimple.aggregateMethod.avg, dimple.plot[layer.type].stacked);
if(layer.data){
var tempdata;
datakeys = d3.keys(layer.data)
tempdata = layer.data[datakeys[1]].map(function(d,i){
var tempobj = {}
datakeys.forEach(function(key){
tempobj[key] = layer.data[key][i]
})
return tempobj
})
s.data = tempdata;
}
['x','y'].map(function(ax){
if( layer[ax + 'Axis'].type=="addMeasureAxis" && layer[ax + 'Axis'].orderRule ){
if( typeof layer[ax + 'Axis'].orderRule == "string" ){
s.addOrderRule( layer[ax + 'Axis'].orderRule );
} else if ( typeof layer[ax + 'Axis'].orderRule == "object" ) {
s._orderRules = layer[ax + 'Axis'].orderRule;
}
}
})
if(layer.hasOwnProperty("groups")) {
s.categoryFields = (typeof layer.groups === "object") ? layer.groups : [layer.groups];
}
if (!(typeof(layer.aggregate) === 'undefined')) {
s.aggregate = eval(layer.aggregate);
}
if (!(typeof(layer.lineWeight) === 'undefined')) {
s.lineWeight = layer.lineWeight;
}
if (!(typeof(layer.lineMarkers) === 'undefined')) {
s.lineMarkers = layer.lineMarkers;
}
if (!(typeof(layer.barGap) === 'undefined')) {
s.barGap = layer.barGap;
}
if (!(typeof(layer.interpolation) === 'undefined')) {
s.interpolation = layer.interpolation;
}
myChart.series.push(s);
return myChart;
};
function buildAxis(position, layer, myChart){
var axis;
var axisopts = opts[position+"Axis"];
if(axisopts.measure) {
axis = myChart[axisopts.type](position,layer[position],axisopts.measure);
} else {
axis = myChart[axisopts.type](position, layer[position]);
};
if(!(axisopts.type === "addPctAxis")) axis.showPercent = axisopts.showPercent;
if (axisopts.orderRule) axis.addOrderRule(axisopts.orderRule);
if (axisopts.grouporderRule) axis.addGroupOrderRule(axisopts.grouporderRule);
if (axisopts.overrideMin) axis.overrideMin = axisopts.overrideMin;
if (axisopts.overrideMax) axis.overrideMax = axisopts.overrideMax;
if (axisopts.overrideMax) axis.overrideMax = axisopts.overrideMax;
if (axisopts.inputFormat) axis.dateParseFormat = axisopts.inputFormat;
if (axisopts.outputFormat) axis.tickFormat = axisopts.outputFormat;
return axis;
};
if (typeof opts.facet == "undefined") opts.facet = {}
opts.facet.x = opts.facet.x ? opts.facet.x : "Dummy"
opts.facet.y = opts.facet.y ? opts.facet.y : "Dummy"
if(opts.facet.x === "Dummy" || opts.facet.y === "Dummy") {
data.forEach(function(d){
d.Dummy = 1;
})
}
var rows = d3.set(data.map(function(d){return d[opts.facet.y]})).values();
var nrow = opts.facet.nrow ? opts.facet.nrow : rows.length;
var cols = d3.set(data.map(function(d){return d[opts.facet.x]})).values()
var ncol = opts.facet.ncol ? opts.facet.ncol : cols.length;
var tuples = d3.merge(rows.map(function(row,irow){return cols.map(function(col,icol){return {key:row + "~" + col, values: {"row":irow, "col":icol} }})}))
var grid = d3.layout.grid()
.rows( nrow )
.cols( ncol )
.size([ opts.width, opts.height-100])
.bands();
var svgGrid = d3.select("#" + opts.id).append("svg")
.attr("width", opts.width)
.attr("height", opts.height);
grid(tuples);
tuples.forEach(function(cell,cellnum) {
var filteredData = dimple.filterData(data, opts.facet.x, cell.key.split('~')[1]);
filteredData = dimple.filterData(filteredData, opts.facet.y, cell.key.split('~')[0]);
var subChart = new dimple.chart(svgGrid, filteredData);
if (tuples.length > 1){
subChart.height = grid.nodeSize()[1]
subChart.width = grid.nodeSize()[0]
if (opts.margins) {
subChart.setBounds(
parseFloat(cell.x + opts.margins.left),
parseFloat(cell.y + opts.margins.top),
subChart.width - opts.margins.right- opts.margins.left,
subChart.height - opts.margins.top - opts.margins.bottom
)
} else {
subChart.setBounds(
parseFloat(cell.x + 50),
parseFloat(cell.y + 10),
parseFloat(grid.nodeSize()[0] - 50),
parseFloat(grid.nodeSize()[1]) - 10
);
}
} else {
if (opts.bounds) {
subChart.setBounds(opts.bounds.x, opts.bounds.y, opts.bounds.width, opts.bounds.height);
}
}
if(opts.noFormats) { subChart.noFormats = opts.noFormats; };
if(d3.keys(opts.colorAxis).length > 0) {
c = subChart[opts.colorAxis.type](opts.colorAxis.colorSeries,opts.colorAxis.palette) ;
if(opts.colorAxis.outputFormat){
c.tickFormat = opts.colorAxis.outputFormat;
}
}
if (typeof defaultColorsArray != "undefined"){
subChart.defaultColors = defaultColorsArray.map(function(d) {
return new dimple.color(d);
});
}
subChart._assignedColors = assignedColors;
subChart = buildSeries(opts, false, subChart);
if (opts.layers.length > 0) {
opts.layers.forEach(function(layer){
subChart = buildSeries(layer, true, subChart);
})
}
if(d3.keys(opts.legend).length > 0) {
var l =subChart.addLegend();
d3.keys(opts.legend).forEach(function(d){
l[d] = opts.legend[d];
});
}
if(opts.storyboard) {
subChart.setStoryboard(opts.storyboard);
};
subChart.facetposition = cell.values;
subCharts.push(subChart);
})
subCharts.forEach(function(subChart) {
subChart.draw();
})
if(opts.facet.removeAxes) {
["x","y","z"].forEach(function(position){
axisdomain = [];
subCharts.forEach(function(subChart){
subChart.axes.forEach(function(axis){
if (axis.position === position && !axis._hasCategories()){
axisdomain.push(axis._scale.domain())
}
})
});
axisdomain = d3.extent([].concat.apply([], axisdomain));
subCharts.forEach(function(subChart){
subChart.axes.forEach(function(axis){
if (axis.position === position && !axis._hasCategories()){
axis.overrideMin = axisdomain[0];
axis.overrideMax = axisdomain[1];
}
})
subChart.draw(null,true)
});
})
var xpos = d3.extent(subCharts,function(d){return d.x});
var ypos = d3.extent(subCharts,function(d){return d.y});
subCharts.filter(function(d){
return d.x!=xpos[0];
}).forEach(function(d){
d.series[0]._dropLineOrigin = function(){
return {"x" : xpos[0],"y" : ypos[1] + d._heightPixels()}
}
d.axes.forEach(function(axis){
if (axis.position === "y"){
if (axis.shapes) axis.shapes.style("opacity",0);
if (axis.titleShape) axis.titleShape.style("opacity",0);
}
})
});
subCharts.filter(function(d){
return d.y!=ypos[1];
}).forEach(function(d){
d.series[0]._dropLineOrigin = function(){
return {"x" : xpos[0],"y" : ypos[1] + d._heightPixels()}
}
d.axes.forEach(function(axis){
if (axis.position === "x"){
if (axis.shapes) axis.shapes.style("opacity",0);
if (axis.titleShape) axis.titleShape.style("opacity",0);
}
})
});
}
return subCharts;
}
})();
</script>
<script></script>
</body>
</html>