Estou usando um gráfico de medidor baseado em ( Chartjs-tsgauge ). Quero definir cores de plano de fundo para o gráfico separadas dos limites do medidor. O problema de como o Charts.JS renderiza o plano de fundo porque o plug-in que usei não possui um código sobre o plano de fundo. Por exemplo, eu tenho um medidor com limites [0, 20, 40, 60, 80, 100]
. Quero definir [0-30]
para verde, [30-70]
amarelo e [70-100]
vermelho. Código atual: CodePEN
Aqui estão as minhas opções atuais.
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
}
});
E aqui está minha abordagem para definir cores de fundo.
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
}
});
Atualmente Chart.JS
combina cores 0
para i
os limites 0
para i
. Também pensei em desenhar outro gráfico fictício com as cores desejadas e colocá-lo no topo do gráfico real, mas parece uma maneira desonesta de fazer isso.
javascript
html5-canvas
chart.js
kenarsuleyman
fonte
fonte
Respostas:
Solução anterior
Você pode alterar um pouco seu conjunto de dados para conseguir isso:
Como você
gagueLimits
está dividido em um intervalo20
atualmente, não é possível acessar o limite de 30,Então, o que eu fiz aqui é elaborado
guageLimits
em um intervalo dividido de10
e agora30
está acessível, assim como70
,Agora, sobre as cores, cada
guageLimits
uma exige uma cor nabackgroundColor
matriz, eu as defino adequadamente, verifique a matriz acima. Como nenhuma das cores correspondentes pode estar vazia, pode ser necessário usar a mesma cor até atingir o próximo intervalo de cores.Solução atualizada
Seus requisitos limpos agora:
Agora, tecnicamente, se você deseja definir um intervalo de cores para um ponto específico, precisa ter esse valor na
gaugeLimits
matriz, para que suagaugeLimits
matriz reduzida agora fique assim:Bem, não, você pode definir as cores adequadamente, pois possui os pontos especificados na matriz. Portanto, a
backgroundColor
matriz é:Agora, o truque final
Você ainda precisa ocultar os 30 e 70 da escala, tentei alternar o
showMarkers
código, parece que ele habilita ou desabilita completamente a escala visível de números, tentei fornecer uma matriz de strings, mas ela aceita apenasboolean
Chartjs-tsgauge Não fornece muita documentação sobre as opções disponíveis, então entrei no código e encontrei
markerFormatFn
O que ele faz é ter uma função como parâmetro e você pode fornecer uma função informando o que fazer com cada um dos itens do marcador.
Então, tive a ideia de fornecer uma função para mostrar apenas os números que são divisíveis por 20 sem nenhum resto; caso contrário, retorne uma string vazia, aqui está:
Verifique o trecho:
fonte