Pass data to Stacked Column Chart (Highcharts Framework) - javascript
I have a problem when trying to render a stacked column chart with the Highcharts framework.
I get an error when rendering on the client:
Uncaught TypeError: a.toPrecision is not a function
From what I've gathered this is related with stacking. If I set stacking to null it won't give an error, but no graph will show.
I'm passing dynamic data to the series. The data is in the form of a name for the legend and an array of values for each xAxis category.
Below is an example of one object that is passed as data. This is stored in an array with a more entries.
name:"READ_CALENDAR"
y: (24) [1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
This must be the wrong way, since I can't get it to work, but what then is the correct way?
My question is, what am I doing wrong? How should I pass dynamic data to make it work? I need to pass several unique instances of data that need to stack and match the xAxis categories.
I will add more details below regarding how I pass data and such. If you want more info comment and I will try to provide as much as I can.
Please help! Thanks in advance!!!
This is an example of data that is passed to the client:
[{"name":"READ_CALENDAR","timesUsed":[1,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0]}, {"name":"READ_CONTACTS","timesUsed":[1,0,0,0,0,0,0,0,0,0,0,0,5,8,12,3,2,0,1,0,0,0,0,0]}, {"name":"READ_EXTERNAL_STORAGE","timesUsed":[1,0,0,0,0,0,0,0,0,10,0,1,9,17,13,39,8,1,0,0,0,0,0,2]}, {"name":"WRITE_EXTERNAL_STORAGE","timesUsed":[1,0,0,0,0,0,0,0,0,10,0,2,9,17,13,38,8,1,0,0,0,0,0,2]}, {"name":"WRITE_SMS","timesUsed":[1,0,0,0,0,0,0,0,0,0,0,0,5,7,12,2,2,1,0,0,0,0,0,0]}, {"name":"CAMERA","timesUsed":[0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,2,2,1,0,0,0,0,0,0]}, {"name":"FINE_LOCATION","timesUsed":[0,0,0,0,0,0,0,0,0,15,4,0,0,0,0,2,0,0,0,0,0,0,0,0]}, {"name":"GPS","timesUsed":[0,0,0,0,0,0,0,0,0,3,0,0,0,1,1,2,0,0,0,0,0,0,0,0]}, {"name":"MONITOR_HIGH_POWER_LOCATION","timesUsed":[0,0,0,0,0,0,0,0,0,4,0,0,0,1,1,2,0,0,0,0,0,0,0,0]}, {"name":"MONITOR_LOCATION","timesUsed":[0,0,0,0,0,0,0,0,0,3,0,0,0,1,1,2,0,0,0,0,0,0,0,0]}, {"name":"OP_READ_PHONE_STATE","timesUsed":[0,0,0,0,0,0,0,0,0,2,0,0,3,2,1,3,0,2,0,0,0,0,0,0]}, {"name":"POST_NOTIFICATION","timesUsed":[0,0,0,0,0,0,0,0,0,16,15,7,10,14,26,17,5,2,1,0,0,0,0,0]}, {"name":"TAKE_AUDIO_FOCUS","timesUsed":[0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,1,0,0,0,0,0,0,0,0]}, {"name":"TOAST_WINDOW","timesUsed":[0,0,0,0,0,0,0,0,0,14,15,7,10,9,13,12,3,1,0,0,0,0,0,0]}, {"name":"WAKE_LOCK","timesUsed":[0,0,0,0,0,0,0,0,0,6,0,0,1,3,2,17,7,2,0,0,0,0,0,1]}, {"name":"WIFI_SCAN","timesUsed":[0,0,0,0,0,0,0,0,0,2,0,0,0,0,2,0,0,0,0,0,0,0,0,0]}, {"name":"BOOT_COMPLETED","timesUsed":[0,0,0,0,0,0,0,0,0,0,0,0,4,2,0,0,0,0,0,0,0,0,0,0]}, {"name":"GET_ACCOUNTS","timesUsed":[0,0,0,0,0,0,0,0,0,0,0,0,4,4,0,3,0,0,0,0,0,0,0,0]}, {"name":"WIFI_CHANGE","timesUsed":[0,0,0,0,0,0,0,0,0,0,0,0,4,2,0,0,0,0,0,0,0,0,0,0]}, {"name":"USE_FINGERPRINT","timesUsed":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0]}, {"name":"RECORD_AUDIO","timesUsed":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,3,0,0,0,0,0,0,0]}, {"name":"VIBRATE","timesUsed":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,0,0,0,0,0,0,0]}, {"name":"WRITE_CALENDAR","timesUsed":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0]}]
This data will then be parsed to a JSON Object with:
var jsonObj = JSON.parse(obj); (where obj is the data)
Then the the data will be pushed to an array:
var seriesData = [];
for (var i in jsonObj) {
seriesData.push({
name: jsonObj[i].name ,
y: jsonObj[i].timesUsed
});
}
Then the Hichcharts scripts looks like this:
Highcharts.chart('permData', {
chart: {
type: 'column'
},
title: {
text: 'Example graph'
},
xAxis: {
categories: ['00-01','01-02','02-03','03-04','04-05','05-06','06-07','07-08','08-09','09-10','10-11','11-12','12-13','13-14','14-15','15-16','16-17','17-18','18-19','19-20','20-21','21-22','22-23','23-24']
},
yAxis: {
min: 0,
title: {
text: 'Y axis text here'
},
stackLabels: {
enabled: true,
style: {
fontWeight: 'bold',
color: null /*(Highcarts.theme && Highcharts.theme.textColor) || 'gray'*/
}
}
},
legend: {
align: 'right',
x: -30,
verticalAlign: 'top',
y: 25,
floating: true,
backgroundColor: null /*(Highcharts.theme && Highcharts.theme.background2) || 'white'*/,
borderColor: '#CCC',
borderWidth: 1,
shadow: false
},
tooltop: {
headerFormat: '<b>{point.x}</b><br/>',
pointFormat: '{series.name}:{point.y}<br/>',
},
plotOptions: {
column: {
stacking: 'percentage',
dataLabels: {
enabled: true,
color: (Highcharts.theme && Highcharts.theme.dataLabelsColor) || 'white'
}
}
},
series: [{
type: 'column',
name: 'perm',
data: seriesData
}]
});
You were very close, you have set y instead of data in your loop building the dataSeries. It should be like this:
for (var i in jsonObj) {
seriesData.push({
name: jsonObj[i].name ,
data: jsonObj[i].timesUsed //data instead of y
});
}
After changing that, it works in the fiddle. y is a member of data, and is used in case you want to set several properties for each point.
Working example: https://jsfiddle.net/ewolden/r5yd56eb/1/
API on series.data: https://api.highcharts.com/highcharts/series.column.data
Related
HighCharts - invalid or unexpected token
I have created a high chart using the code from the following fiddle, but have changed the data to a java string (which pulls in fine) but get the error "uncaught syntax error: invalid or unexpected token" https://jsfiddle.net/gh/get/library/pure/highcharts/highcharts/tree/master/samples/highcharts/demo/column-rotated-labels/ When i click on the error it loads this console sources and points to the "data" tag: Highcharts.chart('container', { chart: { type: 'column' }, title: { text: 'Users per lesson' }, xAxis: { type: 'category', labels: { rotation: -45, style: { fontSize: '13px', fontFamily: 'Verdana, sans-serif' } } }, yAxis: { min: 0, title: { text: 'Users' } }, series: [{ name: 'Users', data: [ "['Snowboarding for dummies', 1], ['Advanced Carving Techniques', 1]," ], dataLabels: { enabled: true, rotation: -90, color: '#FFFFFF', align: 'right', format: '{point.y:.1f}', // one decimal y: 10, // 10 pixels down from the top style: { fontSize: '13px', fontFamily: 'Verdana, sans-serif' } } }] }); What i am actually passing is: data: [ <%=session.getAttribute("jsTag") %> ], But this is creating the string with linebreaks in? If i output the string it outputs as all on one line: ['Snowboarding for dummies', 1], ['Advanced Carving Techniques', 1],
There is an error in the serie data, Highcharts can't understant a Javascript string so you will need to parse the string. It should be like that : ... data: [ ['Snowboarding for dummies', 1], ['Advanced Carving Techniques', 1] ], ... Fiddle
Based on the HighChart sample code, it seems that you are trying to pass an array ( data) with a single string value. HighCharts expects a 2D array as the data key. So if you specify: data:[ ['Shanghai', 24.2],...] i.e 'Shanghai' is the x-axis value and 24.2 is the y-axis value. Now if you want to pass the data as a string, you may want to parse the string first. var data=JSON.parse("[[\"Snowboarding for dummies\", 1], [\"Advanced Carving Techniques\", 1]]"); And then pass this data variable to the HighChart object. All the best!
Customize Stacked column chart in highChart
I am trying to customize stacked column chart like this Here i did all the remaining things but i Don't know how to give that bar lines above every column........I need that bar lines in both positive and negative axis My code $(document).ready(function () { $('#div1').highcharts({ chart: { type: 'column', backgroundColor: 'transparent' }, title: { text: null }, subtitle: { text: null }, credits: { enabled: false }, xAxis: { categories: categories, labels: { rotation: 0, style: { fontWeight: 'normal', fontSize: '0.9vw', fontFamily: 'Verdana, sans-serif', color: "black" } } }, yAxis: { title: { enabled: false }, lineWidth: 0, gridLineWidth: 1, labels: { enabled: true }, // gridLineColor: 'transparent', plotLines: [{ color: '#ddd', width: 1, value: 0 }], }, plotOptions: { series: { stacking: 'normal' } }, series:seriesforSeniorUPT }); }); }); Link Fiddle
To elaborate on Sebastian Bochan's helpful comment, here's an updated version of your fiddle with two "dummy" series to serve as the patterned background: https://jsfiddle.net/brightmatrix/hc8rLy18/2/ A few items to note: There are two "dummy" series: one for the positive numbers and one for the negative numbers. Both series have showInLegend and enableMouseTracking set to false so the user cannot interact with them. Both series have stacking set to false so they will not be part of the "real" data you want to show. Both series have zIndex set to 0. I explain why below the code block. The code for the "dummy" series is as follows. // background for positive values obj = {}; obj["name"] = 'patternFill'; obj["data"] = [120, 120]; obj["color"] = 'url(#highcharts-default-pattern-3)'; obj["grouping"] = false; obj["zIndex"] = 0; obj["enableMouseTracking"] = false; obj["stacking"] = false; obj["showInLegend"] = false; seriesforSeniorUPT.push(obj); // background for negative values obj = {}; obj["name"] = 'patternFill'; obj["data"] = [-80, -80]; obj["color"] = 'url(#highcharts-default-pattern-3)'; obj["grouping"] = false; obj["zIndex"] = 0; obj["enableMouseTracking"] = false; obj["stacking"] = false; obj["showInLegend"] = false; seriesforSeniorUPT.push(obj); For the three "real" data series, I set zIndex to 10 to they will appear over the "dummy" series we're using for our patterend backgrounds. For all of the series, I set grouping to false so they will appear one atop the other, not next to one another. Here's a screenshot of the output. I hope this is helpful!
Highcharts map appending unwanted data
I have a small problem with my Highcharts maps. I managed to get it plotting the data I want and even included a selector so the user can adjust which data series is shown. However, it appears that after rendering one particular series once, the Map is appending data objects to each series for those U.S. territories I don't have data for. My biggest series has 53 data objects (US States plus DC, Puerto Rico, Virgin Islands) but after being rendered once the series shows up with 62 structures including those for which I didn't have data (Saint John, Saipan, etc.). This is causing problems with the snippet of code I use to change the state code to the hc-key format needed by this map. While I could just add some extra checks to that function, i would like to understand why Highcharts is adding data to my data structures. Any help would be most appreciated. My Javascript code is below: <script type="text/javascript"> var states ={resStates: [{code: "AK",value:3},{code: "AL",value:49},{code: "AR",value:9},{code: "AZ",value:28},{code: "CA",value:170},{code: "CO",value:26},{code: "CT",value:12},{code: "DC",value:10},{code: "DE",value:5},{code: "FL",value:126},{code: "GA",value:51},{code: "HI",value:7},{code: "IA",value:5},{code: "ID",value:13},{code: "IL",value:31},{code: "IN",value:28},{code: "KS",value:15},{code: "KY",value:12},{code: "LA",value:17},{code: "MA",value:54},{code: "MD",value:124},{code: "ME",value:13},{code: "MI",value:60},{code: "MN",value:8},{code: "MO",value:19},{code: "MS",value:16},{code: "MT",value:6},{code: "NC",value:43},{code: "ND",value:3},{code: "NE",value:10},{code: "NH",value:14},{code: "NJ",value:72},{code: "NM",value:35},{code: "NV",value:7},{code: "NY",value:70},{code: "OH",value:84},{code: "OK",value:23},{code: "OR",value:11},{code: "PA",value:101},{code: "PR",value:2},{code: "RI",value:20},{code: "SC",value:26},{code: "SD",value:5},{code: "TN",value:19},{code: "TX",value:91},{code: "UT",value:67},{code: "VA",value:112},{code: "VI",value:1},{code: "VT",value:1},{code: "WA",value:29},{code: "WI",value:13},{code: "WV",value:2},{code: "WY",value:4}], acadStates: [{code: "AK",value:1},{code: "AL",value:47},{code: "AR",value:12},{code: "AZ",value:31},{code: "CA",value:163},{code: "CO",value:34},{code: "CT",value:9},{code: "DC",value:18},{code: "DE",value:7},{code: "FL",value:121},{code: "GA",value:80},{code: "HI",value:6},{code: "IA",value:9},{code: "ID",value:9},{code: "IL",value:29},{code: "IN",value:55},{code: "KS",value:16},{code: "KY",value:8},{code: "LA",value:14},{code: "MA",value:65},{code: "MD",value:81},{code: "ME",value:8},{code: "MI",value:66},{code: "MN",value:7},{code: "MO",value:20},{code: "MS",value:13},{code: "MT",value:4},{code: "NB",value:1},{code: "NC",value:53},{code: "ND",value:4},{code: "NE",value:8},{code: "NH",value:13},{code: "NJ",value:32},{code: "NM",value:32},{code: "NV",value:4},{code: "NY",value:93},{code: "OH",value:83},{code: "OK",value:25},{code: "OR",value:7},{code: "PA",value:123},{code: "PR",value:2},{code: "RI",value:15},{code: "SC",value:17},{code: "SD",value:4},{code: "TN",value:9},{code: "TX",value:103},{code: "UT",value:62},{code: "VA",value:114},{code: "VT",value:2},{code: "WA",value:27},{code: "WI",value:19},{code: "WV",value:4},{code: "WY",value:4}], empStates: [{code: "AK",value:2},{code: "AL",value:71},{code: "AR",value:4},{code: "AZ",value:12},{code: "CA",value:235},{code: "CO",value:1},{code: "DC",value:36},{code: "FL",value:104},{code: "GA",value:70},{code: "HI",value:5},{code: "IL",value:17},{code: "IN",value:18},{code: "KS",value:14},{code: "LA",value:5},{code: "MA",value:61},{code: "MD",value:244},{code: "MI",value:39},{code: "MN",value:3},{code: "MO",value:4},{code: "MS",value:64},{code: "NC",value:22},{code: "NE",value:2},{code: "NH",value:20},{code: "NJ",value:62},{code: "NM",value:95},{code: "NY",value:22},{code: "OH",value:133},{code: "OK",value:53},{code: "OR",value:7},{code: "PA",value:38},{code: "RI",value:37},{code: "SC",value:26},{code: "TN",value:9},{code: "TX",value:22},{code: "UT",value:75},{code: "VA",value:126},{code: "WA",value:22},{code: "WV",value:2}]}; $(init) function init() { drawMap(); } function drawMap() { var map_select = $('#smartStates').val(); var map_text = $('#smartStates option:selected').text(); var mydata = states[map_select]; var mycolors = {resStates: { min: 1, type: 'linear', minColor: '#EEEEFF', maxColor: '#000022', stops: [ [0, '#EFEFFF'], [0.67, '#4444FF'], [1, '#000022'] ] }, acadStates: { min: 1, type: 'linear', minColor: '#FFEEEE', maxColor: '#220000', stops: [ [0, '#FFFFEE'], [0.67, '#FF4444'], [1, '#220000'] ] }, empStates: { min: 1, type: 'linear', minColor: '#EEFFEE', maxColor: '#002200', stops: [ [0, '#EEFFEE'], [0.67, '#44FF44'], [1, '#002200'] ] } } // Adjusting codes to fit with the us-all-territories map $.each(mydata, function(){ //looping through each instance of mydata if (this.code == "PR") { this.code = "pr-3614"; } else if (this.code == "undefined"){ //not sure what to do here } else if (this.code.length==2) { this.code = "us-" + this.code.toLowerCase(); } }); // Instanciate the map $('#container').highcharts('Map', { chart : { borderWidth : 1 }, title : { text : 'SMART Participant Counts by ' + map_text }, legend: { layout: 'horizontal', borderWidth: 0, backgroundColor: 'rgba(255,255,255,0.85)', floating: true, verticalAlign: 'top', y: 25 }, mapNavigation: { enabled: true }, colorAxis: mycolors[map_select], series : [{ animation: { duration: 1000 }, data : mydata, mapData: Highcharts.maps['countries/us/custom/us-all-territories'], joinBy: ['hc-key', 'code'], dataLabels: { enabled: true, color: '#FFFFFF', format: '{point.name}' }, name: 'SMART Participants', tooltip: { pointFormat: '{point.name}: {point.value} participants' } }] }); } </script>
This is because in your mapData property you have this: mapData: Highcharts.maps['countries/us/custom/us-all-territories'], us-all-territories, but as you stated, you don't have the data for all of the territories. The solution is to use a different custom map from Highcharts, unfortunately it doesn't look like they have one with only the US territories you are looking for. Update: as the comment by Kacper has mentioned: If you set allAreas in series to false, then empty map zones will not be displayed. Example: http://jsfiddle.net/oen00hec/
Highcharts column fit/adjust on chart
I write because I go back to being stuck in a problem with Highcharts. I have a monthly chart that works fine except for one thing. The zoom level. The X axis is always shown me a value of 0 (today), so that the zoom level is incorrect. I am attaching a picture to try to explain it better. I need this column set in the graph. I appreciate your help! Thank you! The json returned by PHP is (correct results): {"data":[[1401580800000,2],[1400025600000,0],[1400025600000,0],[1400025600000,0],[1400025600000,0],[1400025600000,0],[1400025600000,0],[1400025600000,0],[1400025600000,0],[1400025600000,0],[1400025600000,0],[1400025600000,0],[1400025600000,0],[1400025600000,0],[1400025600000,0],[1400025600000,0],[1400025600000,0],[1400025600000,0],[1400025600000,0],[1400025600000,0],[1400025600000,0],[1400025600000,0],[1400025600000,0],[1400025600000,0],[1400025600000,0],[1400025600000,0],[1400025600000,0],[1400025600000,0],[1400025600000,0],[1400025600000,0]]} And Javascript file: chart = new Highcharts.Chart({ chart: { renderTo: 'divStatsGrupo', plotBackgroundColor: null, plotBorderWidth: null, plotShadow: false }, title: { text: tituloMes }, tooltip: { formatter: function() { return Highcharts.dateFormat('%d/%m/%Y',new Date(this.x)) + '<br/>' +'Alarmas: ' + this.y } }, xAxis: { type: 'datetime', dateTimeLabelFormats : { day: '%e. %b', labels: { style: { width: '200px','min-width': '100px' }, useHTML : true, } } }, yAxis: { title: { text: 'Total alarmas' }, allowDecimals: false, min: 0 }, series : [{ showInLegend: false, name : 'Grafica Mensual', type : 'column', data: data.data, dataLabels: { enabled: true, rotation: 0, color: '#000000', align: 'center', y: 0, style: { fontSize: '14px', fontFamily: 'Verdana, sans-serif', }} }] }); }); ///cierra get EDIT: I need a graphic for month (user select), but, the white area and Xaxis only appers info for the month selected. The PHP file return a correct JSON chain, but highcharts not fit the columns fine. Sorry for my english!
The problem is with your JSON, where you have duplicated values for the same timestamp. Just remove them. Then! You have unsorted data, it should be sorted ascending by timestamp. After fixed, it works fine, see: http://jsfiddle.net/4nCx3/ var data = { "data": [ [1400025600000, 0], [1401580800000, 2] ] };
HighCharts, multiple charts on page call via function
Hopefully someone can help me as I'm stuck at the moment after searching for a solution already for the last 2 days. I decided to look into HighCharts yesterday for a new project and it does do what I'm after. However I'm trying to make the implementation option into my WordPress plugin as clean as possible and that's where I'm stuck at the moment. This JSFiddle is working and shows what I like to get as output: http://jsfiddle.net/golabs/tpKU3/ But I would like to be able to create a new chart by just calling a function and supply the target div ID and the 2 dataArray's. My attempt can be found here: http://jsfiddle.net/golabs/rstpA/ or see the jscode here: /** * However this second section of code does NOT work as nothing is displayed in the container21 div... * What am I doing wrong here? * I like to be able to create a new chart by only supplying the target div ID and the dataArray's, this * to have be able to manage the general settings centrally. * * This JSFIDDLE is related to: http://jsfiddle.net/golabs/tpKU3/ **/ $(function () { var __catergories__ = ['AAA','BBB','CCC','DDD','EEE','FFF','GGG']; var getChartConfig = function( renderId, dataArray1, dataArray2 ) { var config = {}; config.chart = { renderTo: renderId, polar: true, type: 'line', height: 254, width: 360, className: 'SpiderPolarChart', backgroundColor: 'rgba(101,101,101,.1)' }; config.title = { text: '' }; config.legend = { layout: 'horizontal', align: 'center', verticalAlign: 'bottom', y: -3, }; config.credits = { enabled: true, text: 'highcharts.com', href: 'http://highcharts.com/', position: { verticalAlign: 'bottom', x: -11, } }; config.pane = { startAngle: -90, endAngle: 90, center: ['50%', '93%'], size: 300, background: null }; config.xAxis = { categories: __catergories__, tickmarkPlacement: 'on', tickPixelInterval: 1, lineWidth: 0, labels: { rotation: 'auto', distance: 12 }, showLastLabel: true }; config.yAxis = { gridLineInterpolation: 'circle', gridLineDashStyle: 'LongDash', tickInterval: 1, lineWidth: 0, min: 0, max: 5, ceiling: 5, labels: { x: 4, y: 15 }, showLastLabel: true }; config.exporting = { enabled: false }; config.tooltip = { shared: true, pointFormat: '<span style="color:{series.color}">{series.name}: <b>{point.y:,.0f}</b><br/>' }; config.series = [{ name: 'Overall Rating', data: dataArray1, color: '#D4A539', type: 'area', pointPlacement: 'on', connectEnds: false, index: 1, legendIndex: 2 },{ name: 'Personal Rating', data: dataArray2, color: '#333', type: 'line', pointPlacement: 'on', connectEnds: false, index: 2, legendIndex: 1 }]; return config; }; // =========================================================================== charts.push(new Highcharts.Chart( getChartConfig( "container21", [1.5,3,2,3,4,1,2], [1,4,1.5,3,2,3,1] ) )); }); I've run the code through JSHint.com so all typos should be tackled as it doesn't show any errors at the moment. I hope someone can guide me into the right direction to get this to work. Cheers! ** Updated the links to the JSFiddles ** ** ISSUE RESOLVED, see below **
In this jsFiddle (http://jsfiddle.net/golabs/rstpA/) you are not telling it what chart is. You are trying to set the options for a chart that you have not created to update the options you are passing. It is sort of backwards. Here is a quick "fix": var newChart = new Highcharts.Chart( getChartConfig( "container21", [1.5,3,2,3,4,1,2], [1,4,1.5,3,2,3,1] ) ); Now, I would think it would be better to setup a global option set and then merge in your new set (specific to chart you want to build) as in my linked SO answer. This may or may not give you more flexibility.
charts was not defined. Is this the solution you are looking for? var charts = []; charts.push(new Highcharts.Chart( getChartConfig( "container21", [1.5,3,2,3,4,1,2], [1,4,1.5,3,2,3,1] ) )); http://jsfiddle.net/37Gsv/1/
you may try this: var charts = []; var i=0; for (i =1; i< 10; i++){ var o =i.toString(); charts.push(new Highcharts.Chart( getChartConfig( "container2"+o, [1.5,3,2,3,4,1,2], [1,4,1.5,3,2,3,1] ) )); } test link: http://jsfiddle.net/newpiseth/8u0tkkkL/5/