inventor hacer graficas chart app javascript chart.js

javascript - hacer - Chart.js-dibuja una línea horizontal



chart js title (4)

Me gustaría dibujar una línea horizontal en un gráfico usando Chart.js . Pero no puedo hacerlo.

He leído esta pregunta, Chart.js, dibujando una línea vertical arbitraria , pero no puedo transformar el código para dibujar líneas horizontales no verticales.

Espero que me puedan ayudar (especialmente las cáscaras de papa :)).


Aquí está el código JavaScript para dibujar una línea horizontal.

var data = { labels: ["JAN", "FEB", "MAR", "APR", "MAY", "JUN", "JUL", "AUG", "SEP", "OCT", "NOV", "DEC"], datasets: [{ data: [12, 3, 2, 1, 8, 8, 2, 2, 3, 5, 7, 1] }] }; var ctx = document.getElementById("LineWithLine").getContext("2d"); Chart.types.Line.extend({ name: "LineWithLine", initialize: function () { Chart.types.Line.prototype.initialize.apply(this, arguments); }, draw: function () { Chart.types.Line.prototype.draw.apply(this, arguments); var point = this.datasets[0].points[this.options.lineAtIndex] var scale = this.scale console.log(this); // draw line this.chart.ctx.beginPath(); this.chart.ctx.moveTo(scale.startPoint+12, point.y); this.chart.ctx.strokeStyle = ''#ff0000''; this.chart.ctx.lineTo(this.chart.width, point.y); this.chart.ctx.stroke(); // write TODAY this.chart.ctx.textAlign = ''center''; this.chart.ctx.fillText("TODAY", scale.startPoint + 35, point.y+10); } }); new Chart(ctx).LineWithLine(data, { datasetFill : false, lineAtIndex: 2 });

http://jsfiddle.net/7a4hhzge/455/

Esto se basa en el código utilizado para dibujar una línea vertical arbitraria , puede que no sea perfecto, pero debería poder ajustarlo para satisfacer sus necesidades.


Basado en el mensaje de dFelinger, hice un nuevo tipo de carácter que dibuja una línea promedio en el gráfico de líneas. Aquí está el código, solo copie y llame a un nuevo gráfico con el nuevo tipo llamado ''lineWithAverage'' FUNCIONA SOLO PARA CHARTJS 2

Chart.controllers.lineWithAverage = Chart.controllers.line.extend({ initialize: function () { Chart.controllers.line.prototype.initialize.apply(this, arguments); }, draw: function () { Chart.controllers.line.prototype.draw.apply(this, arguments); var scale = this.scale var sum = 0; this.getDataset().data.forEach(function(value) { sum = sum + value; }); var average = sum / this.getDataset().data.length; var averageCoord = this.calculatePointY(average); // draw line this.chart.chart.canvas.ctx = this.chart.chart.canvas.getContext(''2d''); this.chart.chart.canvas.ctx.beginPath(); this.chart.chart.canvas.ctx.moveTo(0, averageCoord); this.chart.chart.canvas.ctx.strokeStyle = ''#979797''; this.chart.chart.canvas.ctx.lineTo(this.chart.chart.width, averageCoord); this.chart.chart.canvas.ctx.stroke(); } });


Si necesita muchas líneas con cierto valor Y, pruebe este código

var data = { labels: ["JAN", "FEB", "MAR", "APR", "MAY", "JUN", "JUL", "AUG", "SEP", "OCT", "NOV", "DEC"], datasets: [{ data: [12, 3, 2, 1, 8, 8, 2, 2, 3, 5, 7, 1] }] }; var ctx = document.getElementById("LineWithLine").getContext("2d"); Chart.types.Line.extend({ name: "LineWithLine", draw: function () { Chart.types.Line.prototype.draw.apply(this, arguments); var lines = this.options.limitLines; for (var i = lines.length; --i >= 0;) { var xStart = Math.round(this.scale.xScalePaddingLeft); var linePositionY = this.scale.calculateY(lines[i].value); this.chart.ctx.fillStyle = lines[i].color ? lines[i].color : this.scale.textColor; this.chart.ctx.font = this.scale.font; this.chart.ctx.textAlign = "left"; this.chart.ctx.textBaseline = "top"; if (this.scale.showLabels && lines[i].label) { this.chart.ctx.fillText(lines[i].label, xStart + 5, linePositionY); } this.chart.ctx.lineWidth = this.scale.gridLineWidth; this.chart.ctx.strokeStyle = lines[i].color ? lines[i].color : this.scale.gridLineColor; if (this.scale.showHorizontalLines) { this.chart.ctx.beginPath(); this.chart.ctx.moveTo(xStart, linePositionY); this.chart.ctx.lineTo(this.scale.width, linePositionY); this.chart.ctx.stroke(); this.chart.ctx.closePath(); } this.chart.ctx.lineWidth = this.lineWidth; this.chart.ctx.strokeStyle = this.lineColor; this.chart.ctx.beginPath(); this.chart.ctx.moveTo(xStart - 5, linePositionY); this.chart.ctx.lineTo(xStart, linePositionY); this.chart.ctx.stroke(); this.chart.ctx.closePath(); } } }); new Chart(ctx).LineWithLine(data, { datasetFill : false, limitLines: [ { label: ''max'', value: 17, color: ''rgba(255, 0, 0, .8)'' }, { label: ''min'', value: 1 }, { value: 7, color: ''rgba(0, 255, 255, .8)'' } ], });

http://jsfiddle.net/vsh6tcfd/3/


Sin ningún código adicional, logré dibujar una línea agregando una nueva entrada como conjunto de datos con estas opciones:

Simplemente reemplácelo con el tamaño de su conjunto de datos y con el valor que representa la línea.

{ data: Array.apply(null, new Array(<length>)).map(Number.prototype.valueOf, <value>), fill: false, radius: 0, backgroundColor: "rgba(0,0,0,0.1)" }

El radio de 0 de alguna manera ocultará los puntos y el relleno: falso hará que aparezca como una línea.