
Security News
ESLint Adds Official Support for Linting HTML
ESLint now supports HTML linting with 48 new rules, expanding its language plugin system to cover more of the modern web development stack.
d3-object-charts
Advanced tools
This is a collection of unconventional D3 charts that aren't typically included in D3 graphing libraries such as C3, available as ES6 classes.
D3 visualization components implemented as objects. Available charts:
The easiest way get a feel for these charts is to checkout the examples.
Make sure the following packages are installed on your machine
$ npm install
Compile into a minified bundle with external stylesheets.
$ gulp build
After the installation of the dependencies the required chart can be instantiated in src/main.js.
Upon completion it has to be compiled using:
$ gulp build
The compiled JS and CSS files can now be referenced to from within an HTML file.
// Minified stylesheets
<link href="dist/style.min.css" rel="stylesheet" type="text/css">
// Minified bundle containing D3 and chart implementation
<script charset="utf-8" src="dist/bundle.js"></script>
Grid chart showing one month per row. Displays the y values in different opacities of a color tone. Higher values equal a darker color.
This example depicts a calendar grid chart created with the required options using this example data set.
var calendar = new CalendarGridChart({
container: '#container-calendar',
});
calendar.drawData({
values: data
});
The following list shows all available options that can be passed to the CalendarGridChart object during the instantiation.
var calendar = new CalendarGridChart({
container: '#container-calendar',
// optional properties:
date_attr: 'date',
// ...
});
Properties marked in this format
are required.
property | description |
---|---|
container | The selector representing the parent element in which the SVG will be created. |
date_attr | The identifier for the x scale property within the data objects. Defaults to 'date'. |
range_attr | The identifier for the x scale property within the data objects. Defaults to 'date'. |
outer_width | The initial width of the SVG that contains the chart. Defaults to 800px. |
outer_height | The initial height of the SVG that contains the chart. Defaults to 360px. |
margin | The margin defines the space of the four sides surrounding the chart. Defaults to {top: 30, left: 150, bottom: 30, right: 0} |
color_min | The brightest color rendered for the lowest value of the range. Defaults to #fff |
color_max | The darkest color rendered for the highest value of the range. Defaults to #000 |
grid_padding | The amount of space in the range interval to be allocated to padding. Typically in the range [0,1]. Defaults to 0.05. |
display_date_format | The format of the Y axis ticks. Defaults to %B %Y (Month Year). |
min_range_zero | Sets the minimum value of the range to 0. Defaults to false. |
legend | Shows a legend with the color range that is used from the minimum value to the maximum value. Defaults to true. |
The following list shows all available options that can be passed to the drawData method call.
// previously created variable is referenced
calendar.drawData({
css_class: "production-value",
// optional property:
values: data
});
Properties marked in this format
are required.
property | description |
---|---|
values | The array containing the data for the chart. Can refer to a variable or the objects can be inserted inline. |
css_class | The CSS class identifying each rect element in the data set. Defaults to none. |
Slider to update the data range (integer or date) dynamically. The range selection (minimum and maximum) is instantly provided as an output.
This example depicts a range slider created with the required options.
var range_slider = new RangeSlider({
container: '#range-slider-int',
outer_height: 100,
delta: {
'min': 50,
'max': 100
},
onRangeUpdated: function(min, max) {
console.log('min', min);
console.log('max', max);
}
});
range_slider.drawData({
abs_min: 0,
abs_max: 1000,
current_min: 100,
current_max: 200,
});
The following list shows all available options that can be passed to the RangeSlider object during the instantiation.
var range_slider = new RangeSlider({
container: '#range-slider',
delta: {
'min': 50,
'max': 100
},
onRangeUpdated: function(min, max) {
// specify what to do with output range
}
});
Properties marked in this format
are required.
property | description |
---|---|
container | The selector representing the parent element in which the SVG will be created. |
delta | The minimum and maximum value defining the range selection spectrum. Has to be given as an object in format as follows. *delta: { 'min': 50, 'max': 100 } |
onRangeUpdated | The selection of a range using the slider triggers this event. Hands over the current minimum and maximum value. Must be a function. Example definition: onRangeUpdated: function(min, max) {} |
date_range | The indicator for whether the input data is given as a Date object or integer. Defaults to boolean false. |
tick_amount | The amount of ticks that should be displayed on the x axis. The specified count is only a hint; the scale may return more or fewer values depending on the input domain. Defaults to 6. |
outer_width | The initial width of the SVG that contains the chart. Defaults to 600px. |
outer_height | The initial height of the SVG that contains the chart. Defaults to 100px. |
margin | The margin defines the space of the four sides surrounding the chart. Defaults to {top: 20, left: 30, bottom: 20, right: 30} |
The following list shows all available options that can be passed to the drawData method call.
// previously created variable is referenced
range_slider.drawData({
abs_min: 0,
abs_max: 1000,
current_min: 100,
current_max: 200,
});
Properties marked in this format
are required.
property | description |
---|---|
abs_min | The absolute minium value of the domain. Specifies the start of the x axis. |
abs_max | The absolute maximum value of the domain. Specifies the end of the x axis. |
current_min | The minimum value of the initial range selection. Specifies the position of the left handle bar. |
current_max | The maximum value of the initial range selection. Specifies the position of the right handle bar. |
This example depicts a calendar grid chart created with additional non-default options and this example data set.
var calendar1 = new CalendarGridChart({
container: '#container-calendar1',
date_attr: 'day_date',
range_attr: 'production',
outer_width: 800,
outer_height: 400,
color_max: '#0404B4'
});
calendar1.drawData({
css_class: "prod-value",
values: data1
});
This example depicts a calendar grid chart created with additional non-default options and this example data set.
var calendar2 = new CalendarGridChart({
container: '#container-calendar2',
grid_padding: 0.3,
margin: {
top: 50,
left: 115,
bottom: 50,
right: 0
},
display_date_format: '%m %Y',
date_attr: 'date',
min_range_zero: true,
range_attr: 'value',
color_max: '#339900',
legend: false
});
calendar2.drawData({
css_class: "value",
values: data2
});
This example depicts a range slider created with additional non-default options.
var range_slider = new RangeSlider({
container: '#range-slider',
delta: {
'min': 3600 * 24 * 1 * 1000,
'max': 3600 * 24 * 5 * 1000
},
date_range: true,
onRangeUpdated: function(min, max) {
console.log('min', min);
console.log('max', max);
}
});
range_slider.drawData({
abs_min: new Date(new Date() - 3600 * 24 * 30 * 1000), // 30 days ago
abs_max: new Date(),
current_min: new Date(new Date() - 3600 * 24 * 10 * 1000),
current_max: new Date(new Date() - 3600 * 24 * 6 * 1000)
});
This example depicts a calendar grid chart created with additional non-default options.
var range_slider_int = new RangeSlider({
container: '#range-slider-int',
delta: {
'min': 10,
'max': 20
},
tick_amount: 4,
onRangeUpdated: function(min, max) {
console.log('min', min);
console.log('max', max);
}
});
range_slider_int.drawData({
abs_min: 10,
abs_max: 99,
current_min: 40,
current_max: 50,
});
You can pass a axis_click_handle
boolean to move the handle position by clicking on any part of the x axis. This feature is disabled by default.
var simple_slider = new SimpleSlider({
container: '#simple-slider',
tick_labels: {
0: '0%',
10: '10%',
20: '20%',
30: '30%',
40: '40%',
50: '50%',
60: '60%',
70: '70%',
80: '80%',
90: '90%',
100: '100%'
},
axis_click_handle: true,
onChange: function(new_value) {
console.log('new_value', new_value);
}
});
simple_slider.drawData({
abs_min: 0,
abs_max: 100,
current_value: 30
});
Snap slider is a simple slider that will snap a D3 brush to the nearest tick mark.
You can pass in a snap_debounce
time in ms, to make the handler more or less smooth.
Additionally you can pass a axis_click_handle
boolean to move the handle position by clicking on any part of the x axis. The handle then smoothly scrolls to the nearest tick mark. This feature is disabled by default.
The onSnap
call back is triggered anytime the handle is snapped to a tick mark.
var snap_slider = new SnapSlider({
container: '#snap-slider',
tick_labels: {
0: '0%',
10: '10%',
20: '20%',
30: '30%',
40: '40%',
50: '50%',
60: '60%',
70: '70%',
80: '80%',
90: '90%',
100: '100%'
},
snap_debounce: 100,
axis_click_handle: true,
onSnap: function(snap_value) {
console.log('snap_value', snap_value);
}
});
snap_slider.drawData({
abs_min: 0,
abs_max: 100,
current_value: 30
});
Compile into a un-minified bundle.
$ gulp dev
Recompile after detected file change.
$ gulp watch
$ gulp test
FAQs
Library of unconventional charts and widgets using D3 and ES6.
We found that d3-object-charts demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 2 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
ESLint now supports HTML linting with 48 new rules, expanding its language plugin system to cover more of the modern web development stack.
Security News
CISA is discontinuing official RSS support for KEV and cybersecurity alerts, shifting updates to email and social media, disrupting automation workflows.
Security News
The MCP community is launching an official registry to standardize AI tool discovery and let agents dynamically find and install MCP servers.