Estoy usando un gráfico de indicadores basado en ( Chartjs-tsgauge ). Quiero establecer los colores de fondo para el gráfico por separado de los límites del medidor. El problema con cómo Charts.JS representa el fondo porque el complemento que utilicé no tiene un código sobre fondos. Por ejemplo, tengo un indicador con límites [0, 20, 40, 60, 80, 100]
. Quiero establecer [0-30]
en verde, [30-70]
en amarillo y [70-100]
en rojo. Código actual: CodePEN
Aquí están mis opciones actuales.
var ctx = document.getElementById("canvas").getContext("2d");
new Chart(ctx, {
type: "tsgauge",
data: {
datasets: [{
backgroundColor: ["#0fdc63", "#fd9704", "#ff7143"],
borderWidth: 0,
gaugeData: {
value: 7777,
valueColor: "#ff7143"
},
gaugeLimits: [0, 3000, 7000, 10000]
}]
},
options: {
events: [],
showMarkers: true
}
});
Y aquí está mi enfoque para configurar los colores de fondo.
new Chart(ctx, {
type: "tsgauge",
data: {
datasets: [{
backgroundColor: ["#0fdc63", "#fd9704", "#ff7143"],
borderWidth: 0,
gaugeData: {
value: 50,
valueColor: "#ff7143"
},
gaugeLimits: [0, 20, 40, 60, 80, 100],
gaugeColors: [{
min: 0,
max: 30,
color: ""
}, {
min: 30,
max: 70,
color: ""
},{
min:70,
max:100,
color: ""
}]
}]
},
options: {
events: [],
showMarkers: true
}
});
Actualmente Chart.JS
partidos colores 0
a i
los límites 0
a i
. También pensé en dibujar otro gráfico ficticio con los colores deseados y configurarlo en la parte superior del gráfico real, pero parece una forma poco fiable de hacerlo.
fuente
Respuestas:
Solución anterior
Puede cambiar un poco su conjunto de datos para lograr eso:
Dado que actualmente
gagueLimits
se divide en un rango20
, por lo que no puede acceder al límite de 30,Entonces, lo que hice aquí es elaborar
guageLimits
un rango dividido de10
y ahora30
es accesible, así es70
,Ahora sobre los colores, cada uno de ustedes
guageLimits
requiere un color en labackgroundColor
matriz, los configuré en consecuencia, verifico la matriz anterior. Dado que ninguno de los colores correspondientes puede estar vacío, es posible que deba usar el mismo color hasta llegar al siguiente rango de colores.Solución actualizada
Sus requisitos aclarados ahora:
Ahora, técnicamente, si desea establecer un rango de color en un punto específico, debe tener ese valor en la
gaugeLimits
matriz, por lo que sugaugeLimits
matriz reducida ahora se vuelve así:Bueno, no, puede configurar los colores en consecuencia, ya que tiene los puntos especificados en la matriz. Por lo tanto, la
backgroundColor
matriz es:Ahora, el truco final
Todavía necesita ocultar el 30 y el 70 de la escala, traté de alternarlo
showMarkers
en su código, parece que habilita o deshabilita la escala numérica visible por completo, traté de proporcionar una serie de cadenas, pero solo aceptaboolean
Chartjs-tsgauge no proporciona mucha documentación sobre las opciones disponibles, así que me colé en el código y encontré
markerFormatFn
Lo que hace es tomar una función como parámetro y puede proporcionar una función que indique qué hacer con cada uno de sus elementos marcadores.
Entonces, se me ocurrió una idea para proporcionar una función que solo muestre los números que son divisibles por 20 sin ningún resto, de lo contrario, devuelve una cadena vacía, aquí está:
Revise el fragmento:
fuente