orange-charts
v0.1.8
Published
Orange.Charts - simple light library for creating SVG (vector) charts both server-client and client-side
Downloads
2,779
Readme
Orange.Charts
Simple light library for creating SVG (vector) charts both server-client and client-side.
Library provides functionality for line charts, bar charts, pie charts, etc.
Example
This is example of the bar (column) chart:
const data_elections_history_popular_vote = [
{'year': '1996', 'republicans': 39197469, 'democrats': 47401185},
{'year': '2000', 'republicans': 50456002, 'democrats': 50999897},
{'year': '2004', 'republicans': 62040610, 'democrats': 59028444},
{'year': '2008', 'republicans': 59948323, 'democrats': 69498516},
{'year': '2012', 'republicans': 60933504, 'democrats': 65915795},
{'year': '2016', 'republicans': 62984828, 'democrats': 65844610},
{'year': '2020', 'republicans': 74216747, 'democrats': 81268867}
]; // Data set
(new OrangeChartBars(data_elections_history_popular_vote))
.assignSource("republicans", "#ff1a1a") // Assign first source (columns will be red) - property "republicans" from the data set
.assignSource("democrats", "#2e4de5") // Assign second source (columns will be blue) - property "democrats" from the data set
.axis("x", { // Description of X axis
"label": true, // Show label for X axis values
"title": "Elections year", // Title of the axis
"source": "year" // "year" property will be used as data for X axis,
})
.axis("y", { // Description of Y axis
"min": 0, // Minimal value (without definition it would be calculated automatically
"max": 160000000, // Maximal value (without definition it would be calculated automatically
"lines": true, // Render horizontal (for Y axis) lines
"label": v => `${v / 1000000}M` // Show labels processed via this callback
})
.render("bars_chart_cumulative", { // Render chart in object with ID "bars_chart_cumulative"
"width": 768, "height": 384 // Dimensions of the SVG file
});
See examples file for more examples.
Classes
OrangeChartAbstract
Abstract chart. Can be used for extending this library.
Methods and properties of this class appear in any type of chart.
| Element | Name | Type | Description |
|---|---|---|---|
| method | constructor
| | Creates chart. Data set (array of objects) should be provided as argument |
| abstract static readonly property | allowed_axes
| string[]
| List of axes allowed for the chart (overridden for each type of chart) |
| static readonly property | source_axis
| string
| Name of axis for dynamic data ("y" by default) |
| abstract static readonly property | chart_type_code
| string
| Name of chart type |
| method | assignSource
| this
| Assigns property of data set's objects to be used for source axis |
| method | setDataCallback
| this
| Defines default JavaScript callbacks for elements created for representation of the value |
| method | getCallbacks
| this
| Returns callback by property name (default if custom were not defined via OrangeChartAbstract.assignSource |
| method | axis
| this
| Defines axis configuration. See below details about second argument of the function |
| method | render
| SVGSVGElement
| Renders chart |
| method | toString
| string
| Converts chart to SVG string |
Different types of charts
OrangeChartBars
- vertical bars (columns) chartOrangeChartDots
- chart with dots positioned by x and y coordinates (z-value can be used for different diameter of the dots)OrangeChartHorizontalBars
- horizontal bars chartOrangeChartLines
- lines chartOrangeChartPie
- pie chart
Special functionality
OrangeChartDots
You can define function to calculate color of dots:
...
.assignSource("param", row => {
return Math.random() >= 0.5 ? '#00ff00' : '#ff0000'
})
...
Other classes
They can be used for extending this library.
OrangeChartAxis
- represents axis of the chartOrangeChartAbstractBars
- abstract bar chartOrangeChartAbstractGrid
- abstract "grid"-type chart (with two axes and set of values to be shown on the "grid")
Config arguments
config
: OrangeChartAbstract.axis(*, config)
Config is supposed to be an object with these possible properties. Some values may not be used for some types of charts. Default values may vary as well.
| Name | Type | Description |
|---|---|---|
| sources
| string[]
| list of properties to be used as data source for the axis |
| sources
| string
| one property to be used as data source for the axis |
| dynamic
| boolean
| defines if data for this axis dynamic or serial |
| cumulative
| boolean
| defines if data from multiple sources should be summarized |
| label
| boolean
, function
| defines if label should be rendered (if function is provided it will be used to process value for each label) |
| lines
| boolean
| defines if lines (horizontal for "y" axis, vertical for "x" axis) should be rendered on the background |
| min
| number
| minimal value of the axis |
| max
| number
| maximal value of the axis |
view
: OrangeChartAbstract.render(*, view), OrangeChartAbstract.toString(view)
This config defines some configuration for chart's rendering. Certain properties can be uses for certain chart types.
| Name | Type | Description | Chart types |
|---|---|---|---|
| width
| number
| Chart's width (in pixels) | All |
| height
| number
| Chart's height (in pixels) | All |
| default_margin
| number
| Default margin for the chart's elements (in pixels) | All |
| line_color
| string
| Color of the line in the grid | All with axes |
| line_thickness
| number
| Thickness of the line in the grid | All with axes |
| diameter
| number
| Chart's diameter (in pixels) - can be used instead of width
and height
| OrangeChartPie
|
| label
| boolean
or number
| Defines if labels for the pie chart's elements should be rendered (if number is provided it is being used as minimal percent of the pie's sector for having a label) | OrangeChartPie
|
| bar_size
| number
| Size of the bar (in pixels) - can be used instead of width
/ height
| OrangeChartBars
, OrangeChartHorizontalBars
|
| fair
| boolean
| Use true
if you want mathematically correct SVG files (in other case some values can be slightly adjusted for minimizing rendering issues) | OrangeChartBars
, OrangeChartHorizontalBars
|
| radius
| boolean
| Fixed dot radius | OrangeChartDots
|
| dots
| boolean
| Defines if dots should be rendered on the chart's line | OrangeChartLines
|
| min_radius
| number
| Minimal dot radius (dynamic mode) | OrangeChartDots
, OrangeChartLines
|
| max_radius
| number
| Maximal dot radius (dynamic mode) | OrangeChartDots
, OrangeChartLines
|
| median_line
| number
| Provide value (number of chunks to split data) to show line based on median value of data chunk | OrangeChartDots
, OrangeChartLines
|
| median_line_color
| string
| Defines color of median values line | OrangeChartDots
|
| average_line
| number
| Provide value (number of chunks to split data) to show line based on average value of data chunk | OrangeChartDots
, OrangeChartLines
|
| average_line_color
| string
| Defines color of average values line | OrangeChartDots
|
| area
| boolean
| Defines if area below the line should be filled with the color | OrangeChartLines
|
| area_opacity
| number
| Defines opacity of the area below the line | OrangeChartLines
|
| average_lines
| object
| Enables lines with average line per property | OrangeChartDots
, OrangeChartLines
, OrangeChartBars
, OrangeChartHorizontalBars
|
| average_lines:key
| string
| Data property name | |
| average_lines:value
| string
| Line for data property line's color | |
| all_average_line
| boolean
or string
| Enables line with average line (all properties); defines line's color | OrangeChartDots
, OrangeChartLines
, OrangeChartBars
, OrangeChartHorizontalBars
|
Logarithmic chart
For some charts, such as OrangeChartBars
, OrangeChartLines
and OrangeChartDots
, you can define logarithmic mode.
To do so, it should by in dynamic mode for Y axis (works that way by default for Y
axis in such charts) and provide log: true
option:
...
.axis("y", {
"label": true,
"log": true
})
...
Please, pay attention that right now "average lines" functionality doesn't work correctly with logarithmic mode.