Create Your Own Themes
Assume that you have to create a theme named mySampleTheme, which needs to include the properties listed below:
For all charts, gauges, and maps:
Set palette colors to: #0075c2, #1aaf5d, #f2c500.
Set the subcaption to Harry's SuperMart throughout the application and ensure that it cannot be changed.
Define uniform cosmetics for the caption and subcaption.
Enable hover effects for data plots.
Set uniform cosmetics for all trendlines and render them as dashed.
For all column 2D charts:
Ensure data plots for positive data values are rendered using the color code: #3333FF.
Ensure data plots for negative data values are rendered using the color code: #CC0000.
For all bubble charts:
Show quadrant lines with uniform cosmetics.
Set uniform cosmetics for regression lines.
For all pie 2D charts:
Show percentage values in tooltips.
Enable smart labels.
For all zoom line charts:
- Set a minimum distance between anchor points.
 
For all Gantt charts:
- Set the cosmetics for header texts of processes.
 
For all maps:
Show short names as labels and not in the tooltip text.
Set the fill hover color and transparency for entities and markers.
Set uniform cosmetics for all marker connectors.
Given below is a stepwise procedure for creating this theme:
Step 1: In a text editor, create a new text file. Name this file mySampleTheme.js. Save it in the js/themes folder.
Step 2: Map properties to tiers, as listed below:
Map global properties for all charts, gauges, and maps in the application, to the
basetier.Map properties specific to column 2D charts to the
column2dtier.Map properties specific to bubble charts to the
bubbletier.Map properties specific to pie2d charts to the
pie2dtier.Map properties specific to zoom line charts to the
zoomlinetier.Map properties specific to Gantt charts to the
gantttier.Map global properties for all maps in the application, to the
geotier.
Step 3: Determine the structure of each tier by mapping the attributes to be defined with the objects they belong to, as listed below:
Within the
basetier:Use the
paletteColorsattribute (under thechartobject) to configure palette colors for the data plots.Use the
subCaptionattribute (under thechartobject) to set the subcaption to Harry's SuperMart.Use the
captionFontSize,subCaptionFontSize,captionFontBold, andsubCaptionFontBoldattributes (under thechartobject) to define uniform cosmetics for the caption and subcaption.Use the
showHoverEffectattribute (under thechartobject) to enable hover effects for all data plots.Use the
color,thickness,dashed,dashLen, anddashGapattributes (under thetrendlinesobject) to set uniform cosmetics for all trendlines.
Within the
column2dtier:- Use the 
colorattribute (under thedataobject, which belongs to thedatasetobject) to set different color codes for data plots representing positive and negative data values. 
- Use the 
 Within the
bubbletier:Use the
drawQuadrantattribute (under thechartobject) to show quadrant lines.Use the
quadrantLineColor,quadrantLineThickness, andquadrantLineAlphaobjects (under thechartobject) to set uniform cosmetics for all quadrant lines.Use the
regressionLineColor,regressionLineThickness, andregressionLineAlphaobjects (under thechartobject) to set uniform cosmetics for all regression lines.
Within the
pie2dtier:Use the
showPercentInToolTipattribute (under thechartobject) to show percentage values in tooltip.Use the
enableSmartLabelsattribute (under thechartobject) to enable smart labels.
Within the
zoomlinetier:- Use the 
anchorMinRenderDistanceattribute (under thechartobject) to set a minimum distance between anchor points. 
- Use the 
 Within the
gantttier:- Use the 
headerFont,headerFontSize,headerFontColor,headerIsBold,headerIsUnderline,headerAlign, andheaderVAlignattributes (under theprocessesobject) to set the cosmetics for the header texts of processes. 
- Use the 
 Within the
geotier:Use the
showLabels,useSNameInLabels, anduseSNameInToolTipattributes (under thechartobject) to show short names as labels, instead of tooltip text.Use the
entityFillHoverColorandentityFillHoverAlphaattributes (under thechartobject) to set fill hover color and transparency for the entities.Use the
markerFillHoverColorandmarkerFillHoverAlphaattributes (under thechartobject) to set fill hover color and transparency for the markers.Use the
color,thickness,alpha,dashed,dashLen, anddashGapattributes (under theconnectorobject, which belongs to themarkerobject) to set uniform cosmetics for all marker connectors.
Step 4: Add the JavaScript code for the theme in the theme file. Based on the mapping shown above, write the JavaScript code for your theme in the mySampleTheme.js file that you created in Step 1.
Refer to the code for the new theme, given below:
//The `FusionCharts.register()` API is used to register the new theme in the FusionCharts core.
FusionCharts.register('theme', {
    name: 'mySampleTheme',
    theme: {
        base: {
            chart: {
                paletteColors: '#0075c2,#1aaf5d,#f2c500',
                subCaption: 'Harry\'s SuperMart !important', //The !important directive is used to ensure that the subcaption cannot be overriden in the theme definition or in the chart data.
                captionFontSize: '14',
                subCaptionFontSize: '12',
                captionFontBold: '1',
                subCaptionFontBold: '0',
                showHoverEffect: '1',
                placeValuesInside: '0'
            },
            trendlines: [{
                color: '#FF000',
                thickness: '3',
                dashed: '1',
                dashLen: '4',
                dashGap: '2'
            }]
        },
        column2d: {
            dataset: {
                data: function(dataObj) {
                    return {
                        color: (Number(dataObj.value) < 0 ? "#3333FF" : "#CC0000")
                    }
                }
            }
        },
        bubble: {
            chart: {
                drawQuadrant: '1',
                quadrantLineColor: '3',
                quadrantLineThickness: '1',
                quadrantLineAlpha: '4',
            },
            dataset: [{
                regressionLineColor: '#123456',
                regressionLineThickness: '3',
                regressionLineAlpha: '70'  
            }]
        },
        pie2d: {
            chart: {
                showPercentInToolTip: '1',
                enableSmartLabels: '1'
            }
        },
        zoomline: {
            chart: {
                anchorMinRenderDistance : '20'
            }
        },
        gantt: {
            processes: [{
                headerFont: 'Arial',
                headerFontSize: '16',
                headerFontColor: '#321ABC',
                headerIsBold: '1',
                headerIsUnderline: '1',
                headerAlign: 'left',
                headerVAlign: 'bottom'
            }]
        },
        geo: {
            chart: {
                showLabels: '1',
                useSNameInLabels: '1',
                useSNameInToolTip: '0',
                entityFillHoverColor: '#9A9A9A',
                entityFillHoverAlpha: '60',
                markerFillHoverColor: '#8AE65C',
                markerFillHoverAlpha: '60',
            },
            marker: {
                connector: {
                    thickness: '4',
                    color: '#336699',
                    alpha: '60',
                    dashed: '1',
                    dashLen: '4',
                    dashGap: '2'
                }
            }
        }
    }
});
Step 5: Apply your new theme to the charts, gauges, and maps in your application, using either the theme attribute of the chart object or the setChartAttribute() method of the FusionCharts API.
Create and register multiple themes
If you need to create multiple new themes for your application, then ideally you should include all theme definitions in the same file. That way, you will have to include only one .js file in your application, instead of multiple files. You can then change the theme name, as the value of the theme attribute, or as the parameter of the setChartAttribute() method.
Refer to the code below for a sample:
{
    var myTheme1 = {
        name: 'my-theme-1',
        theme: {...} // Theme JSON
    },
    myTheme2 = {
        name: 'my-theme-1',
        theme: {...} // Theme JSON
    },
    myTheme3 = {
        name: 'my-theme-1',
        theme: {...} // Theme JSON
    };
}
To register all the themes in one go, use the FusionCharts.register() API as shown below:
FusionCharts.register('theme', [myTheme1, myTheme2, myTheme3]);
You can also create and register multiple themes as shown below:
FusionCharts.register('theme', [
    {name: 'my-theme-1', theme: {...}}, 
    {name: 'my-theme-2', theme: {...}}, 
    {name: 'my-theme-3', theme: {...}}
]);
Include escape characters in theme definition
You can include escape characters in definitions for new themes using the same process as the one you follow to include them when modifying existing themes. The process is detailed here.