Google spreadsheet API. Cannot specify axisPosition of a series - javascript
I want to specify the axis of a series. If i specify targetAxis to be "RIGHT_AXIS", it doesn't work..
The Axis-titles for LEFT_AXIS and RIGHT_AXIS are also not showing. Only the bottom one.
I want the graph to look like this:
But it ends up looking like this:
Here the red axis is at the bottom, because this column contains much lower numbers then the column with the numbers for the blue bars.
Someone who knows how i can solve this?
Here is my code:
{
addChart: {
chart: {
spec: {
title: "Graf - tibber",
basicChart: {
chartType: "COMBO",
axis: [
// X-AXIS
{
position: "BOTTOM_AXIS",
title: "TID",
},
// Y-AXIS LEFT
{
position: "LEFT_AXIS",
title: "FORBRUK(KWH)",
},
// X-AXIS RIGHT
{
position: "RIGHT_AXIS",
title: "PRIS",
},
],
legendPosition: "BOTTOM_LEGEND",
domains: [
{
domain: {
sourceRange: {
sources: [
{
sheetId: 0,
startRowIndex: 0,
endRowIndex: endIndex,
startColumnIndex: 0,
endColumnIndex: 1
}
]
}
}
}
],
series: [
{
series: {
sourceRange: {
sources: [
{
sheetId: 0,
startRowIndex: 0,
endRowIndex: endIndex,
startColumnIndex: 5,
endColumnIndex: 6,
},
],
},
},
targetAxis: "LEFT_AXIS",
},
{
series: {
sourceRange: {
sources: [
{
sheetId: 0,
startRowIndex: 0,
endRowIndex: endIndex,
startColumnIndex: 3,
endColumnIndex: 4,
},
],
},
},
targetAxis: "RIGHT_AXIS",
}
],
headerCount: 1,
},
},
position: {
newSheet: true,
},
},
},
},
],
Improved request
Disclaimer, there is a bug in the API for the right hand axis, see end of answer
{
"requests": [
{
"addChart": {
"chart": {
"spec": {
"title": "Graf - tibber",
"basicChart": {
"chartType": "COMBO",
"legendPosition": "BOTTOM_LEGEND",
"axis": [
{
"position": "BOTTOM_AXIS",
"title": "TID"
},
{
"position": "LEFT_AXIS",
"title": "FORBRUK(KWH)"
},
{
"position": "RIGHT_AXIS",
"title": "PRIS"
}
],
"domains": [
{
"domain": {
"sourceRange": {
"sources": [
{
"sheetId": 0,
"startRowIndex": 0,
"endRowIndex": 8,
"startColumnIndex": 0,
"endColumnIndex": 1
}
]
}
}
}
],
"series": [
{
"series": {
"sourceRange": {
"sources": [
{
"sheetId": 0,
"startRowIndex": 0,
"endRowIndex": 8,
"startColumnIndex": 1,
"endColumnIndex": 2
}
]
}
},
"targetAxis": "LEFT_AXIS",
"type": "COLUMN"
},
{
"series": {
"sourceRange": {
"sources": [
{
"sheetId": 0,
"startRowIndex": 0,
"endRowIndex": 8,
"startColumnIndex": 2,
"endColumnIndex": 3
}
]
}
},
"targetAxis": "RIGHT_AXIS",
"type": "LINE"
}
],
"headerCount": 1
}
},
"position": {
"newSheet": true
}
}
}
}
]
}
Note that the row and column indices I changed because I was working with some sample data. "type": "COLUMN" and "type": "LINE" entries in the series. In fact, for me, I would get 400 bad request without it. This produces a chart with BOTTOM_AXIS and LEFT_AXIS but not RIGHT_AXIS (see below for info on that). The chart also has two different scales so the line doesn't get overshadowed by the columns.
Right Axis
Unfortunately this is a current bug with the API: https://issuetracker.google.com/issues/153528225 - be sure to mark it with a ☆ to let Google know that this affects you.
Reference
Sample Chart Requests - I used the sample to navigate the documentation to find out if there were any attributes missing.
Related
Using matter-js when adding a Body using fromVertices - the resulting vertices are not positioned correctly with relation to each other
Here's the shape I'm expecting to see. You can see the points along the edge depicting the vertices. Here's the json file (generated from the above) that I'm loading in (via a simple import) and using to create the Body. { "cannon_transparent_sm": { "label": "cannon", "density": 0.1, "restitution": 0, "friction": 0.1, "frictionAir": 0.01, "frictionStatic": 0.5, "fixtures": [ { "label": "cannon_fixture", "vertices": [ [ { "x":150, "y":45 }, { "x":134, "y":0 }, { "x":18, "y":30 }, { "x":1, "y":56 }, { "x":21, "y":94 }, { "x":86, "y":76 } ], [ { "x":43, "y":17 }, { "x":44, "y":23 }, { "x":59, "y":19 }, { "x":58, "y":14 } ], [ { "x":6, "y":41 }, { "x":1, "y":56 }, { "x":18, "y":30 } ], [ { "x":6, "y":83 }, { "x":21, "y":94 }, { "x":1, "y":56 }, { "x":2, "y":72 } ], [ { "x":86, "y":76 }, { "x":21, "y":94 }, { "x":25, "y":108 }, { "x":48, "y":124 }, { "x":61, "y":124 }, { "x":73, "y":119 }, { "x":83, "y":109 }, { "x":88, "y":95 } ], [ { "x":34, "y":118 }, { "x":48, "y":124 }, { "x":25, "y":108 } ] ] } ] } } The above was generated from this physicseditor tool. There's a problem when I try to add this to my 2d world. I'm using the javascript library matter-js and fromVertices() to generate the sprite. This is what I see however. It looks to me like each set of vertices has been positioned incorrectly with relation to each other. Here's the javascript I'm using to add the "cannon". var cannonBodyDef = { position: Vector.create(300, 50), density: this._cannon.density, restitution: this._cannon.restitution, friction: this._cannon.friction, frictionStatic: this._cannon.frictionStatic, frictionAir: 0.9, //this._cannon.frictionAir }; var cannon = Bodies.fromVertices(300, 200, this._cannon.fixtures[0].vertices, cannonBodyDef); World.add(engine.world, cannon); It's also dropping to the floor (expected) then wobbling a little and falling straight through! Even though the floor is static: true. Not sure if that is related.
Json data for apexcharts
I have some problems rendering some data from a JSON in my apexchart series. Here is the example of my chart with the data that I want to be in my JSON, and i don't know how to write it. var _seed = 42; Math.random = function() { _seed = _seed * 16807 % 2147483647; return (_seed - 1) / 2147483646; }; var options = { series: [{ name: "Q", data: [0, 4800, 9500, null], }, { name: "Q - 1", data: [0, 6500, 12000, 16000] },{ name: "Q Target", data: [15500, 15500, 15500, 15500] }, ], chart: { height: 350, type: 'line', zoom: { enabled: false } }, dataLabels: { enabled: false }, stroke: { curve: 'straight' }, title: { text: 'Clicks', align: 'left' }, grid: { row: { colors: ['#f3f3f3', 'transparent'], // takes an array which will be repeated on columns opacity: 0.5 }, }, xaxis: { categories: [' ', 'Month1', 'Month2', 'Month3'], } }; var chart = new ApexCharts(document.querySelector("#chart"), options); chart.render(); #chart { max-width: 450px; margin: 35px auto; } <script src="https://cdn.jsdelivr.net/npm/promise-polyfill#8/dist/polyfill.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/eligrey-classlist-js-polyfill"></script> <script src="https://cdn.jsdelivr.net/npm/findindex_polyfill_mdn"></script> <script src="https://cdn.jsdelivr.net/npm/es6-promise#4/dist/es6-promise.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/es6-promise#4/dist/es6-promise.auto.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/apexcharts"></script> <div id="chart"></div> If someone could give me a hint, is kindly appreciated.
The JSON looks like this , for retrieving data for the apexchart { "data_clicks":[ { "name":"Q", "data":[ { "x":" ", "y":0 }, { "x":"Month1", "y":2400 }, { "x":"Month2", "y":5200 }, { "x":"Month3", "y":null } ] }, { "name":"Q - 1", "data":[ { "x":" ", "y":0 }, { "x":"Month1", "y":1800 }, { "x":"Month2", "y":7150 }, { "x":"Month3", "y":10200 } ] }, { "name":"Q Target", "data":[ { "x":" ", "y":11000 }, { "x":"Month1", "y":11000 }, { "x":"Month2", "y":11000 }, { "x":"Month3", "y":11000 } ] } ],
Highchart and timeline does not work with large dataset
I have been working on a large dataset : http://jsfiddle.net/470bddfp/1/ It's about 2600 entries I don't want to group data, but use zoomtype feature instead Unfortunately it does not work, I just change selection, and I have empty data. What is even worst, is when I use smaller dataset like I made in this exemple http://jsfiddle.net/470bddfp/2/ zoomtype is working ! $(function() { var chart = new Highcharts.Chart({ chart: { "renderTo": "container", "zoomType": "x", "panning": true, "panKey": "shift" }, plotOptions: { "series": { "states": { "hover": { "enabled": false } } } }, series: [{ "name": "First Timeline", "type": "line", "data": [ [1447608100000, 4.256], [1447608070000, 4.471], [1447608045000, 4.916], [1447608042000, 2.946], [1447608029000, 3.517], [1447608003000, 5.801], [1447607954000, 4.162], [1447607924000, 2.415], [1447607908000, 3.314], [1447607898000, 2.765], [1447607888000, 3.581], [1447607861000, 7.016], [1447607740000, 3.485], [1447607719000, 4.264], [1447607700000, 2.855], [1447607694000, 3.142], [1447607676000, 4.92], [1447607613000, 2.899], [1447607603000, 2.729], [1447607594000, 4.054], [1447607538000, 2.61], [1447607526000, 2.43], [1447607515000, 5.984], [1447607467000, 2.529], [1447607445000, 3.398], [1447607391000, 4.9], [1447607365000, 4.829], [1447607310000, 2.935], [1447607287000, 4.811], [1447607242000, 4.897], [1447607219000, 3.354], [1447607157000, 5.929], [1447607156000, 4.444], [1447607128000, 6.542], [1447607125000, 8.854], [1447607121000, 5.693], [1447607118000, 3.906], [1447607092000, 2.843], [1447607085000, 2.615], [1447607076000, 2.651], [1447607060000, 5.015], [1447607057000, 2.441], [1447607045000, 4.417], [1447607015000, 5.198], [1447607012000, 7.056], [1447607006000, 4.014], [1447606988000, 3.363], [1447606965000, 2.329], [1447606925000, 4.209], [1447606922000, 4.095], [1447606892000, 3.021], [1447606879000, 4.54], [1447606815000, 3.73], [1447606783000, 7.097], [1447606781000, 4.336], [1447606732000, 2.786], [1447606714000, 2.774], [1447606675000, 6.027], [1447606626000, 3.349], [1447606576000, 3.147], [1447606565000, 4.873], [1447606518000, 4.064], [1447606500000, 2.458], [1447606484000, 2.601], [1447606480000, 3.839], [1447606429000, 5.348], [1447606390000, 5.665], [1447606287000, 7.904], [1447606079000, 4.976], [1447606055000, 5.577], [1447606016000, 4.474], [1447605931000, 5.43], [1447605893000, 2.979], [1447605889000, 6.101], [1447605758000, 2.608], [1447605757000, 5.77], [1447605732000, 4.056], [1447605701000, 5.834], [1447605668000, 3.143], [1447605665000, 2.924], [1447605647000, 2.941], [1447605631000, 3.544], [1447605589000, 3.78], [1447605566000, 7.102], [1447605564000, 4.404], [1447605563000, 5.95], [1447605536000, 3.158], [1447605499000, 2.618], [1447605470000, 4.327], [1447605456000, 4.384], [1447605434000, 6.955], [1447605307000, 3.632], [1447605289000, 3.25], [1447605276000, 3.711], [1447605266000, 4.151], [1447605224000, 4.985], [1447605186000, 3.37], [1447605163000, 2.553], [1447605136000, 6.708], [1447605042000, 6.076], [1447604944000, 2.934], [1447604923000, 6.721], [1447604660000, 5.824], [1447604608000, 4.777], [1447604572000, 2.702], [1447604560000, 3.34], [1447604512000, 8.953], [1447604509000, 7.409], [1447604399000, 6.201], [1447604327000, 2.912], [1447604317000, 3.708], [1447604280000, 4.575], [1447604251000, 6.961], [1447604248000, 3.878], [1447604237000, 3.699], [1447604232000, 4.066], [1447604194000, 2.265], [1447604182000, 4.943], [1447604135000, 2.764], [1447604132000, 7.494], [1447603986000, 6.042], [1447603983000, 3.071], [1447603948000, 5.029], [1447603887000, 7.517], [1447603762000, 6.409], [1447603758000, 4.375], [1447603729000, 6.743], [1447603584000, 2.78], [1447603561000, 5.06], [1447603536000, 5.109], [1447603499000, 3.178], [1447603433000, 6.729], [1447603368000, 4.771], [1447603278000, 4.775], [1447603256000, 2.522], [1447603242000, 6.729], [1447603065000, 5.433], [1447603016000, 3.842], [1447602983000, 7.156], [1447602780000, 7.057], [1447602609000, 5.594], [1447602566000, 6.967], [1447602420000, 4.171], [1447602345000, 5.094], [1447602311000, 3.869], [1447602293000, 4.59], [1447602290000, 2.944], [1447602271000, 6.146], [1447602174000, 2.749], [1447602161000, 2.713], [1447602116000, 7.074], [1447602065000, 3.175], [1447602053000, 3.326], [1447601987000, 3.973], [1447601984000, 5.376], [1447601933000, 3.106], [1447601899000, 6.304], [1447601822000, 2.749], [1447601773000, 5.92], [1447601650000, 7.701], [1447601547000, 2.893], [1447601532000, 3.036], [1447601523000, 6.992], [1447601392000, 7.213], [1447601061000, 6.555], [1447600809000, 5.283], [1447600771000, 4.829], [1447600748000, 2.75], [1447600719000, 5.896], [1447600632000, 4.905], [1447600607000, 2.821], [1447600583000, 2.98], [1447600582000, 4.549], [1447600568000, 4.821], [1447600527000, 3.244], [1447600521000, 6.498], [1447600404000, 4.902], [1447600380000, 5.754], [1447600287000, 4.958], [1447600250000, 3.106], [1447600235000, 2.655], [1447600231000, 3.266], [1447600194000, 5.529], [1447600152000, 4.377], [1447600086000, 3.799], [1447600083000, 3.085], [1447600072000, 5.024], [1447600036000, 4.372], [1447600024000, 2.653], [1447600024000, 3.836], [1447600015000, 3.173], [1447600007000, 5.187], [1447599920000, 3.063], [1447599914000, 3.986], [1447599898000, 4.572], [1447599817000, 4.282], [1447599807000, 4.841], [1447599802000, 4.515], [1447599764000, 2.617], [1447599749000, 2.932], [1447599724000, 7.049], [1447599720000, 4.841], [1447599695000, 6.434], [1447599692000, 3.248], [1447599687000, 3.738], [1447599680000, 4.174], [1447599625000, 4.691], [1447599575000, 3.657], [1447599561000, 3.93], [1447599506000, 7.645], [1447599243000, 7.372], [1447599242000, 5.109], [1447599212000, 3.965], [1447599188000, 3.358], [1447599177000, 5.133], [1447599177000, 2.737], [1447599168000, 3.591], [1447599104000, 3.627], [1447599094000, 4.185], [1447599079000, 4.75], [1447599040000, 3.388], [1447599029000, 2.608], [1447599020000, 2.721], [1447598998000, 3.548], [1447598983000, 4.117], [1447598967000, 3.311], [1447598953000, 4.011], [1447598911000, 3.208], [1447598886000, 4.261], [1447598878000, 5.554], [1447598845000, 4.951], [1447598783000, 4.79], [1447598728000, 4.677], [1447598665000, 3.013], [1447598648000, 3.199], [1447598630000, 5.953], [1447598556000, 2.935], [1447598549000, 3.082], [1447598521000, 4.991], [1447598493000, 5.14] ], "tooltip": { "valueSuffix": " secondes" } }], title: { "text": "Temps de r\u00e9ponse de RISe" }, xAxis: [{ "type": "datetime", "dateTimeLabelFormats": { "hours": "%H:%M" } }], yAxis: { "labels": { "format": "{value}s" }, "title": { "text": null }, "min": 0, "max": 9 }, }); }); I didn't found anything in documentation relating on limitations for zoomtype Thanks by advance for any help
Why my column chart is getting cropped in highcharts
I have implemented column chart using highchart . My rightmost column is getting cropped and I am not able to get it fixed . Please suggest which option is being missed by me . { "chart":{ "renderTo":"1_123456_id", "type":"column", "marginBottom":100, "marginTop":100, "marginRight":400, "width":1050 }, "leftMetric":"Too Soft", "rightMetric":"Too Loud", "activeCount":8, "passiveCount":0, "optimal":92, "totalResponses":25, "averageText":"4.6", "plotOptions":{ "series":{ "pointWidth":[ "30" ], "borderRadius":[ "10" ], }, "column":{ "pointPlacement":"on", }, }, "credits":{ "enabled":false }, "title":{ "text":"VOLUME", "x":310, "align":"left", "style":{ "fontWeight":"bold", "fontSize":15, "color":"#000", "marginRight":100 } }, "xAxis":[ { "categories":[ 0, 0, 0, 1, 0, 20, 2, 0, 1, 1, 0 ], "tickmarkPlacement":"on", "tickPositions":[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 ], "gridLineDashStyle":"longdash", "gridLineWidth":1, "labels":{ "style":{ "fontWeight":"bold", "fontSize":15 } } }, { "linkedTo":0, "tickmarkPlacement":"on", "tickPositions":[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 ], "opposite":"true", "categories":[ 0, 1, 2, 3, 4, 5, 4, 3, 2, 1, 0 ], "gridLineDashStyle":"longdash", "gridLineWidth":1 } ], "yAxis":{ "min":0, "max":30, "labels":{ "enabled":true }, "title":{ "text":"Responses" }, "tickInterval":2, "gridLineColor":"#9ACD9D", }, "series":[ { "showInLegend":false, "name":"speaker", "data":[ { "y":0, "color":"C82506" }, { "y":0, "color":"BC5B0C" }, { "y":0, "color":"F39019" }, { "y":1, "color":"F5D329" }, { "y":0, "color":"#70BF40" }, { "y":20, "color":"#01882A" }, { "y":2, "color":"#70BF40" }, { "y":0, "color":"F5D329" }, { "y":1, "color":"F39019" }, { "y":1, "color":"BC5B0C" }, { "y":1, "color":"C82506" } ] } ] } LINK TO FIDDLE EDIT How can make grid lines to move out of axis on extremes and middle as marked in image
Correct way: you just need to turn off clip in plotOptions plotOptions:{ column: { pointPlacement: "on", clip: false, } } Here is the Fiddle and also Thanks to Pawel Fus Tricky way: Here is what you want. i don't update my previous answer as that may help others. but as the problem was charts cropped by highchart so i do the reverse and remove the integer number from clip-path= "url(#highcharts-NUMBER) attribute to have the full chart. <g class="highcharts-series highcharts-tracker" visibility="visible" zIndex="3" transform="translate(51,100) scale(1 1)" style="" clip-path="url(#highcharts-1)"> Here the code to do this: function showMagic(){ $(".highcharts-series-group").children() .filter(function() { var $this = $(this); var lol = $this.attr("clip-path"); if (lol) { $this.attr("clip-path","url(#highcharts)"); } else { return false; } }); } window.onload = showMagic; Yes a little tricky, but it works! Here is the LIVE DEMO UPDATE: This part will be the answer to the update part of question: we should format labels of xAxis : "labels": { "useHTML": true, "formatter": function () { if(this.value==0 || this.value==5) { return '<p style="margin-top: -20px;" >'+this.value + '<br> | </p> ' ; } else { return this.value; } } }, Here is the LIVE DEMO
This is because of pointPlacement: "on". so just remove this part of yor code: "column":{ "pointPlacement":"on", }, When pointPlacement is "on", the point will not create any padding of the X axis In a column chart. Here is the fiddle
First remove tickPositions, they are unnecessary when using categories. Then you need to set: min: -0.5 max: categories.length - 0.5 (10.5 in your case) startOnTick: false endOnTick: false And live example: http://jsfiddle.net/ASJm9/7/
highcharts tooltip not working properly for hacked gantt chart
The tooltips for my hacked gantt chart using highcharts doesnt seem to be working properly. I used the gantt chart provided by the highcharts team from here-: http://jsfiddle.net/highcharts/r6emu/ I am using UnixTime and that seems to be somehow throwing off the tooltips. Here-: http://jsfiddle.net/bootkick/NFS5M/ // Define tasks var tasks = [{ "name": "a", "intervals": [{ "from": 1366005607000, "to": 1366006490000 }] }, { "name": "b", "intervals": [{ "from": 1366059607000, "to": 1366061858000 }, { "from": 1366056006000, "to": 1366058223000 }, { "from": 1366047007000, "to": 1366049299000 }, { "from": 1366034407000, "to": 1366036682000 }, { "from": 1366030808000, "to": 1366033050000 }, { "from": 1366027208000, "to": 1366029512000 }, { "from": 1366018209000, "to": 1366021296000 }] }, { "name": "c", "intervals": [{ "from": 1366018209000, "to": 1366019966000 }] }, { "name": "d", "intervals": [{ "from": 1366005607000, "to": 1366047612000 }, { "from": 1366002007000, "to": 1366002202000 }] }]; // re-structure the tasks into line seriesvar series = []; var series = []; $.each(tasks.reverse(), function (i, task) { var item = { name: task.name, data: [] }; $.each(task.intervals, function (j, interval) { item.data.push({ x: interval.from, y: i, label: interval.label, from: interval.from, to: interval.to }, { x: interval.to, y: i, from: interval.from, to: interval.to }); // add a null value between intervals if (task.intervals[j + 1]) { item.data.push( [(interval.to + task.intervals[j + 1].from) / 2, null]); } }); series.push(item); }); // create the chart var chart = new Highcharts.Chart({ chart: { renderTo: 'container' }, title: { text: 'Daily activities' }, xAxis: { type: 'datetime' }, yAxis: { tickInterval: 1, labels: { formatter: function () { if (tasks[this.value]) { return tasks[this.value].name; } } }, startOnTick: false, endOnTick: false, title: { text: 'Activity' }, minPadding: 0.2, maxPadding: 0.2 }, legend: { enabled: false }, tooltip: { formatter: function () { return '<b>' + tasks[this.y].name + '</b><br/>' + Highcharts.dateFormat('%H:%M', this.point.options.from) + ' - ' + Highcharts.dateFormat('%H:%M', this.point.options.to); } }, plotOptions: { line: { lineWidth: 9, marker: { enabled: false }, dataLabels: { enabled: true, align: 'left', formatter: function () { return this.point.options && this.point.options.label; } } } }, series: series }); I am relatively new to Javascript and Highcharts so pardon the obvious if any.
I figured it out. The problem was that the from,to timestamp pairs within a name/category are not in the ascending order. For the tooltip to work correctly, they need to be in the ascending order which is kinda weird.