vertical valores una posicion poner numeros nombre modificar los horizontal hacer gráfico grafico graficas grafica etiquetas escala ejes eje como cambiar javascript charts chart.js

javascript - valores - como poner nombre a los ejes de un grafico en excel 2010



El gráfico Js cambia la orientación de la etiqueta en el eje x para los gráficos de líneas (3)

Estoy usando chart.js .

Similar a esta pregunta , me gustaría rotar mis etiquetas del eje x 90 grados. Actualmente mis etiquetas giran unos 80 grados con la configuración predeterminada.

¿Podría alguien ayudarme a adaptar la solución de gráficos de barras para rotar etiquetas, de modo que pueda usarla en los gráficos de líneas?


Aquí hay una versión un poco más intrincada (la respuesta de Quince es mejor; lo siguiente puede fallar si una futura implementación de Chart.js calculateXLabelRotation diferente las etiquetasXLabelRotation)

La rotación de etiquetas se calcula girando progresivamente las etiquetas para que se ajusten entre las líneas verticales de la cuadrícula; el espacio entre ellas se calcula utilizando scale.calculateX(1) - scale.calculateX(0) . Saltamos en el punto correcto para forzar que el resultado de este cálculo sea 0 (al hacer que scale.calculateX devuelva el mismo valor) - esto a su vez hace que la rotación progrese a su máximo (es decir, 90 grados)

Avance

Guión

Chart.types.Line.extend({ name: "LineAlt", initialize: function () { Chart.types.Line.prototype.initialize.apply(this, arguments); var scale = this.scale; var originalCalculateXLabelRotation = scale.calculateXLabelRotation; var originalXScalePaddingLeft = scale.xScalePaddingLeft; scale.calculateXLabelRotation = function () { var originalCalculateX = scale.calculateX; scale.calculateX = function () { return 0; } originalCalculateXLabelRotation.apply(this, arguments); scale.xScalePaddingLeft = originalXScalePaddingLeft; scale.calculateX = originalCalculateX; } this.scale.fit(); } });

y entonces

... new Chart(ctx).LineAlt(data);

Fiddle - http://jsfiddle.net/gc5gdg7e/


Si está utilizando chart.js 2.x, simplemente configure maxRotation: 90 y minRotation: 90 en las opciones de ticks. ¡Esto funciona para mi! Y si desea todas las etiquetas x, es posible que desee establecer autoSkip: false . Lo siguiente es un ejemplo.

var myChart = new Chart(ctx, { type: ''bar'', data: chartData, options: { scales: { xAxes: [{ ticks: { autoSkip: false, maxRotation: 90, minRotation: 90 } }] } } });


Usando el mismo método que en la respuesta anterior, lo único que se debe cambiar es la extensión del tipo de gráfico. Esta vez está extendiendo el gráfico de líneas y la configuración es un poco diferente, ya que la escala de gráficos de líneas se crea en la escala de construcción, por lo que esta vez se reemplaza buildScale para que se use la escala personalizada y se pueda utilizar la nueva opción overrideRotation pasado. initialize también se anula, pero solo para que se pueda llamar a la super inicialización y para que la bola ruede en la construcción del gráfico.

var helpers = Chart.helpers; Chart.MyScale = Chart.Scale.extend({ calculateXLabelRotation: function() { //Get the width of each grid by calculating the difference //between x offsets between 0 and 1. this.ctx.font = this.font; var firstWidth = this.ctx.measureText(this.xLabels[0]).width, lastWidth = this.ctx.measureText(this.xLabels[this.xLabels.length - 1]).width, firstRotated, lastRotated; this.xScalePaddingRight = lastWidth / 2 + 3; this.xScalePaddingLeft = (firstWidth / 2 > this.yLabelWidth + 10) ? firstWidth / 2 : this.yLabelWidth + 10; this.xLabelRotation = 0; if (this.display) { var originalLabelWidth = helpers.longestText(this.ctx, this.font, this.xLabels), cosRotation, firstRotatedWidth; this.xLabelWidth = originalLabelWidth; //Allow 3 pixels x2 padding either side for label readability var xGridWidth = Math.floor(this.calculateX(1) - this.calculateX(0)) - 6; if (this.overrideRotation) { this.xLabelRotation = this.overrideRotation; cosRotation = Math.cos(helpers.radians(this.xLabelRotation)); // We''re right aligning the text now. if (firstRotated + this.fontSize / 2 > this.yLabelWidth + 8) { this.xScalePaddingLeft = firstRotated + this.fontSize / 2; } this.xScalePaddingRight = this.fontSize / 2; this.xLabelWidth = cosRotation * originalLabelWidth; } else { //Max label rotate should be 90 - also act as a loop counter while ((this.xLabelWidth > xGridWidth && this.xLabelRotation === 0) || (this.xLabelWidth > xGridWidth && this.xLabelRotation <= 90 && this.xLabelRotation > 0)) { cosRotation = Math.cos(helpers.radians(this.xLabelRotation)); firstRotated = cosRotation * firstWidth; lastRotated = cosRotation * lastWidth; // We''re right aligning the text now. if (firstRotated + this.fontSize / 2 > this.yLabelWidth + 8) { this.xScalePaddingLeft = firstRotated + this.fontSize / 2; } this.xScalePaddingRight = this.fontSize / 2; this.xLabelRotation++; this.xLabelWidth = cosRotation * originalLabelWidth; } } if (this.xLabelRotation > 0) { this.endPoint -= Math.sin(helpers.radians(this.xLabelRotation)) * originalLabelWidth + 3; } } else { this.xLabelWidth = 0; this.xScalePaddingRight = this.padding; this.xScalePaddingLeft = this.padding; } }, }); Chart.types.Line.extend({ name: "MyLine", initialize: function(data) { Chart.types.Line.prototype.initialize.apply(this, arguments); }, buildScale: function(labels) { var self = this; var dataTotal = function() { var values = []; self.eachPoints(function(point) { values.push(point.value); }); return values; }; var scaleOptions = { templateString: this.options.scaleLabel, height: this.chart.height, width: this.chart.width, ctx: this.chart.ctx, textColor: this.options.scaleFontColor, offsetGridLines: this.options.offsetGridLines, fontSize: this.options.scaleFontSize, fontStyle: this.options.scaleFontStyle, fontFamily: this.options.scaleFontFamily, valuesCount: labels.length, beginAtZero: this.options.scaleBeginAtZero, integersOnly: this.options.scaleIntegersOnly, calculateYRange: function(currentHeight) { var updatedRanges = helpers.calculateScaleRange( dataTotal(), currentHeight, this.fontSize, this.beginAtZero, this.integersOnly ); helpers.extend(this, updatedRanges); }, xLabels: labels, font: helpers.fontString(this.options.scaleFontSize, this.options.scaleFontStyle, this.options.scaleFontFamily), lineWidth: this.options.scaleLineWidth, lineColor: this.options.scaleLineColor, showHorizontalLines: this.options.scaleShowHorizontalLines, showVerticalLines: this.options.scaleShowVerticalLines, gridLineWidth: (this.options.scaleShowGridLines) ? this.options.scaleGridLineWidth : 0, gridLineColor: (this.options.scaleShowGridLines) ? this.options.scaleGridLineColor : "rgba(0,0,0,0)", padding: (this.options.showScale) ? 0 : this.options.pointDotRadius + this.options.pointDotStrokeWidth, showLabels: this.options.scaleShowLabels, display: this.options.showScale, overrideRotation: this.options.overrideRotation, }; if (this.options.scaleOverride) { helpers.extend(scaleOptions, { calculateYRange: helpers.noop, steps: this.options.scaleSteps, stepValue: this.options.scaleStepWidth, min: this.options.scaleStartValue, max: this.options.scaleStartValue + (this.options.scaleSteps * this.options.scaleStepWidth) }); } this.scale = new Chart.MyScale(scaleOptions); }, }); var randomScalingFactor = function() { return Math.round(Math.random() * 100) }; var barChartData = { labels: ["January", "February", "March", "April", "May", "June", "July"], datasets: [{ fillColor: "rgba(20,20,220,0.2)", strokeColor: "rgba(20,20,220,1)", pointColor: "rgba(20,20,220,1)", pointStrokeColor: "#fff", pointHighlightFill: "#fff", pointHighlightStroke: "rgba(20,20,220,1)", data: [randomScalingFactor(), randomScalingFactor(), randomScalingFactor(), randomScalingFactor(), randomScalingFactor(), randomScalingFactor(), randomScalingFactor()] }, { fillColor: "rgba(120,120,120,0.2)", strokeColor: "rgba(120,220,120,1)", pointColor: "rgba(120,120,120,1)", pointStrokeColor: "#fff", pointHighlightFill: "#fff", pointHighlightStroke: "rgba(120,120,120,1)", data: [randomScalingFactor(), randomScalingFactor(), randomScalingFactor(), randomScalingFactor(), randomScalingFactor(), randomScalingFactor(), randomScalingFactor()] }, { fillColor: "rgba(220,220,220,0.2)", strokeColor: "rgba(220,220,220,1)", pointColor: "rgba(220,220,220,1)", pointStrokeColor: "#fff", pointHighlightFill: "#fff", pointHighlightStroke: "rgba(220,220,220,1)", data: [randomScalingFactor(), randomScalingFactor(), randomScalingFactor(), randomScalingFactor(), randomScalingFactor(), randomScalingFactor(), randomScalingFactor()] }] } window.onload = function() { var ctx = document.getElementById("canvas").getContext("2d"); window.myBar = new Chart(ctx).MyLine(barChartData, { overrideRotation: 90 }); }

<script src="http://www.chartjs.org/assets/Chart.min.js"></script> <canvas id="canvas" height="150" width="300"></canvas>