C3: Difference between revisions
From charlesreid1
(Created page with "C3 examples: http://c3js.org/examples.html C3 documentation: http://c3js.org/reference.html Category:D3 Category:C3 Category:Javascript") |
No edit summary |
||
| Line 3: | Line 3: | ||
C3 documentation: http://c3js.org/reference.html | C3 documentation: http://c3js.org/reference.html | ||
==C3 donut chart== | |||
Here's an example of a donut chart: | |||
<pre> | |||
var donut_chart = c3.generate({ | |||
bindto: "#donut-chart", | |||
data: { | |||
columns: [ | |||
["series1", 1.0], | |||
["series2", 1.0], | |||
["series3", 1.0], | |||
], | |||
type : 'donut', | |||
colors: { | |||
'series1' : '#4daf4a', | |||
'series2' : '#ff7f00', | |||
'series3' : '#984ea3', | |||
} | |||
}, | |||
donut: { | |||
title: "" | |||
}, | |||
oninit: hideDonutLabels, | |||
size: { | |||
height: 350 | |||
} | |||
}); | |||
</pre> | |||
If you want to hide or show the labels on the donut chart, you can select text tags in the chart using jQuery: | |||
<pre> | |||
function hideDonutLabels() { | |||
/* Before user picks county, hide the donut chart labels */ | |||
$("#donut-chart").find("text").css("visibility","hidden"); | |||
} | |||
function showDonutLabels() { | |||
/* After user picks conty, show the donut chart labels */ | |||
$("#donut-chart").find("text").css("visibility","visible"); | |||
} | |||
</pre> | |||
Note that hideDonutLabels() is called on init. When a county in the map is clicked, showDonutLabels() is called and the text is visible. | |||
==C3 area chart== | |||
Here is an area chart: | |||
<pre> | |||
var area_chart = c3.generate({ | |||
bindto: "#area-chart", | |||
data: { | |||
columns: [ | |||
['line1', 0,0,0,0], | |||
['line2', 0,0,0,0] | |||
], | |||
types: { | |||
line1: 'area-spline', | |||
line2: 'area-spline' | |||
// 'line', 'spline', 'step', 'area', 'area-spline', 'area-step' | |||
}, | |||
colors: { | |||
'line1' : '#ffff33', | |||
'line2' : '#377eb8', | |||
}, | |||
groups: [ | |||
['line1', | |||
'line2'] | |||
] | |||
}, | |||
size: { | |||
height: 350 | |||
} | |||
}); | |||
</pre> | |||
Now, there are three functions to define interaction with the map: layerMouseover(), layerMouseout(), and layerMouseclick(). Here we just cover layerMouseclick(). | |||
<pre> | |||
var Nclicks = 0; | |||
function layerMouseclick() { | |||
showDonutLabels(); | |||
updateChartData(this.feature.properties); | |||
var county = this.feature.properties.name; | |||
var value = parseFloat(this.feature.properties.derived_quantity).toFixed(2); | |||
$("#info-name").text(county); | |||
$("#info-value").text(value); | |||
these_layer_ids = Object.keys(this._layers); | |||
// First, make sure no counties are selectFillColor. | |||
// Restore any previously selectFillColor counties | |||
// to their original color. | |||
map.eachLayer(function(layer) { | |||
if(layer.options) { | |||
if( layer['options']['fillColor'] ) { | |||
if(layer.options['fillColor']===selectFillColor) { | |||
//console.log("Returning active fill color back to original fill color."); | |||
//console.log("Before: "+layer.options['fillColor']); | |||
layer.setStyle( | |||
{ | |||
'fillColor': layer.options['originalFillColor'], | |||
'fillOpacity' : normalCountyOpacity, | |||
'color': '' | |||
} | |||
) | |||
} | |||
} | |||
} | |||
}); | |||
// Now make the county the user clicked selectFillColor. | |||
// Some counties have multiple pieces, | |||
// so we need to use var these_layer_ids | |||
map.eachLayer(function(layer,ii) { | |||
if( layer['options'] ){ | |||
these_layer_ids.forEach( function(this_layer_id) { | |||
if(layer['_leaflet_id']==this_layer_id) { | |||
if(layer['options']['fillColor']){ | |||
// Get the county's current color. | |||
currentFillColor = layer['options']['fillColor']; | |||
// Check if county is already selectFillColor. | |||
// If not, make it selectFillColor. | |||
if( currentFillColor===selectFillColor) { | |||
// Shouldn't get here | |||
var a=0; | |||
} else { | |||
// set style to selectFillColor | |||
layer.setStyle({ | |||
'fillColor' : selectFillColor, | |||
'fillOpacity' : selectCountyOpacity, | |||
'color': selectStrokeColor | |||
}); | |||
} | |||
} else { | |||
// Shouldn't get here | |||
layer.setStyle({ | |||
'fillColor' : selectFillColor, | |||
'fillOpacity' : selectCountyOpacity, | |||
'color': selectStrokeColor | |||
}); | |||
} | |||
} | |||
}); | |||
} | |||
}); | |||
// Last, change the title of the chart | |||
//console.log(county); | |||
//$(".c3-chart-arcs-title").text(county); | |||
$("#county-name").text(county); | |||
}; | |||
function updateChartData(properties) { | |||
// We define arrays above, instead of inline below, | |||
// in an attempt to get Javascript to respect the | |||
// order of the keys. | |||
// No such luck. | |||
area_chart.load({ | |||
json: { | |||
'line1':properties.line['line1'], | |||
'line2':properties.line['line2'] | |||
} | |||
}); | |||
donut_chart.load({ | |||
columns: [ | |||
['series1', properties['bar']['series1']], | |||
['series2', properties['bar']['series2']], | |||
['series3', properties['bar']['series3']] | |||
] | |||
}); | |||
} | |||
// f = feature, l = layer | |||
function enhanceLayer(f,l){ | |||
// add popup | |||
var out = []; | |||
if (f.properties){ | |||
// http://leafletjs.com/reference.html#path-options | |||
l.setStyle({ | |||
fillColor: "#aaa", //getColor(0), //f.properties['derived_quantity']/10.0), | |||
originalFillColor: "#aaa", //getColor(0), //f.properties['derived_quantity']/10.0), | |||
fillOpacity: normalCountyOpacity, | |||
stroke: true, | |||
weight: 0 | |||
}); | |||
l.on({ | |||
mouseover: layerMouseover, | |||
mouseout: layerMouseout, | |||
click: layerMouseclick | |||
}); | |||
} | |||
} | |||
var geoj = new L.geoJson.ajax(prefix+"/canew.geojson",{ | |||
onEachFeature:enhanceLayer | |||
}).addTo(map); | |||
$("#donut-chart").find("text").css("fill","#eee"); | |||
$("#area-chart").find("text").css("fill","#eee"); | |||
$("#area-chart").find(".c3-axis-y").css("fill","#eee"); | |||
$("#area-chart").find(".c3-axis-x").css("fill","#eee"); | |||
</pre> | |||
Latest revision as of 11:50, 19 February 2018
C3 examples: http://c3js.org/examples.html
C3 documentation: http://c3js.org/reference.html
C3 donut chart
Here's an example of a donut chart:
var donut_chart = c3.generate({
bindto: "#donut-chart",
data: {
columns: [
["series1", 1.0],
["series2", 1.0],
["series3", 1.0],
],
type : 'donut',
colors: {
'series1' : '#4daf4a',
'series2' : '#ff7f00',
'series3' : '#984ea3',
}
},
donut: {
title: ""
},
oninit: hideDonutLabels,
size: {
height: 350
}
});
If you want to hide or show the labels on the donut chart, you can select text tags in the chart using jQuery:
function hideDonutLabels() {
/* Before user picks county, hide the donut chart labels */
$("#donut-chart").find("text").css("visibility","hidden");
}
function showDonutLabels() {
/* After user picks conty, show the donut chart labels */
$("#donut-chart").find("text").css("visibility","visible");
}
Note that hideDonutLabels() is called on init. When a county in the map is clicked, showDonutLabels() is called and the text is visible.
C3 area chart
Here is an area chart:
var area_chart = c3.generate({
bindto: "#area-chart",
data: {
columns: [
['line1', 0,0,0,0],
['line2', 0,0,0,0]
],
types: {
line1: 'area-spline',
line2: 'area-spline'
// 'line', 'spline', 'step', 'area', 'area-spline', 'area-step'
},
colors: {
'line1' : '#ffff33',
'line2' : '#377eb8',
},
groups: [
['line1',
'line2']
]
},
size: {
height: 350
}
});
Now, there are three functions to define interaction with the map: layerMouseover(), layerMouseout(), and layerMouseclick(). Here we just cover layerMouseclick().
var Nclicks = 0;
function layerMouseclick() {
showDonutLabels();
updateChartData(this.feature.properties);
var county = this.feature.properties.name;
var value = parseFloat(this.feature.properties.derived_quantity).toFixed(2);
$("#info-name").text(county);
$("#info-value").text(value);
these_layer_ids = Object.keys(this._layers);
// First, make sure no counties are selectFillColor.
// Restore any previously selectFillColor counties
// to their original color.
map.eachLayer(function(layer) {
if(layer.options) {
if( layer['options']['fillColor'] ) {
if(layer.options['fillColor']===selectFillColor) {
//console.log("Returning active fill color back to original fill color.");
//console.log("Before: "+layer.options['fillColor']);
layer.setStyle(
{
'fillColor': layer.options['originalFillColor'],
'fillOpacity' : normalCountyOpacity,
'color': ''
}
)
}
}
}
});
// Now make the county the user clicked selectFillColor.
// Some counties have multiple pieces,
// so we need to use var these_layer_ids
map.eachLayer(function(layer,ii) {
if( layer['options'] ){
these_layer_ids.forEach( function(this_layer_id) {
if(layer['_leaflet_id']==this_layer_id) {
if(layer['options']['fillColor']){
// Get the county's current color.
currentFillColor = layer['options']['fillColor'];
// Check if county is already selectFillColor.
// If not, make it selectFillColor.
if( currentFillColor===selectFillColor) {
// Shouldn't get here
var a=0;
} else {
// set style to selectFillColor
layer.setStyle({
'fillColor' : selectFillColor,
'fillOpacity' : selectCountyOpacity,
'color': selectStrokeColor
});
}
} else {
// Shouldn't get here
layer.setStyle({
'fillColor' : selectFillColor,
'fillOpacity' : selectCountyOpacity,
'color': selectStrokeColor
});
}
}
});
}
});
// Last, change the title of the chart
//console.log(county);
//$(".c3-chart-arcs-title").text(county);
$("#county-name").text(county);
};
function updateChartData(properties) {
// We define arrays above, instead of inline below,
// in an attempt to get Javascript to respect the
// order of the keys.
// No such luck.
area_chart.load({
json: {
'line1':properties.line['line1'],
'line2':properties.line['line2']
}
});
donut_chart.load({
columns: [
['series1', properties['bar']['series1']],
['series2', properties['bar']['series2']],
['series3', properties['bar']['series3']]
]
});
}
// f = feature, l = layer
function enhanceLayer(f,l){
// add popup
var out = [];
if (f.properties){
// http://leafletjs.com/reference.html#path-options
l.setStyle({
fillColor: "#aaa", //getColor(0), //f.properties['derived_quantity']/10.0),
originalFillColor: "#aaa", //getColor(0), //f.properties['derived_quantity']/10.0),
fillOpacity: normalCountyOpacity,
stroke: true,
weight: 0
});
l.on({
mouseover: layerMouseover,
mouseout: layerMouseout,
click: layerMouseclick
});
}
}
var geoj = new L.geoJson.ajax(prefix+"/canew.geojson",{
onEachFeature:enhanceLayer
}).addTo(map);
$("#donut-chart").find("text").css("fill","#eee");
$("#area-chart").find("text").css("fill","#eee");
$("#area-chart").find(".c3-axis-y").css("fill","#eee");
$("#area-chart").find(".c3-axis-x").css("fill","#eee");