Chart.js - добавить градиент вместо сплошного цвета - внедряющее решение
Я использую Chart.js, и все в порядке, но я хочу заменить текущий цветной фон (fillColor: "rgba (250,174,50,0.5)" ) с градиентом.
У меня есть решение для замены градиента, но для меня это слишком сложно реализовать с моим бедным знанием JS. Я думаю, довольно легко для тех, кто знает JS.
Итак, мой код Chart.js:
<script>
var data = {
labels : ["02:00","04:00","06:00","08:00","10:00","12:00","14:00","16:00","18:00","20:00","22:00","00:00"],
datasets: [
{
fillColor : "rgba(250,174,50,0.5)",
strokeColor : "#ff6c23",
pointColor : "#fff",
pointStrokeColor : "#ff6c23",
pointHighlightFill: "#fff",
pointHighlightStroke: "#ff6c23",
data : [25.0,32.4,22.2,39.4,34.2,22.0,23.2,24.1,20.0,18.4,19.1,17.4]
}
]
};
var options = {
responsive: true,
datasetStrokeWidth : 3,
pointDotStrokeWidth : 4,
tooltipFillColor: "rgba(0,0,0,0.8)",
tooltipFontStyle: "bold",
tooltipTemplate: "<%if (label){%><%=label + ' hod' %>: <%}%><%= value + '°C' %>",
scaleLabel : "<%= Number(value).toFixed(0).replace('.', ',') + '°C'%>"
};
var ctx = document.getElementById("temp-chart").getContext("2d");
var myLineChart = new Chart(ctx).Line(data, options);
</script>
И вот решение с градиентом. Может кто-нибудь попробовать реализовать этот фон градиента вместо моего текущего сплошного фона? Спасибо за помощь.
Я попытался реализовать его, но тогда другие функции не работают (например, scaleLabels и т.д.).
Ответы
Ответ 1
Связи, которые вы предоставили, были довольно ясны, вы должны поместить в поле fillColor
в наборах данных объект linearGradient вместо обычного цвета. Вы можете выполнять сложные градиенты, но вот код простой (изменение непрозрачности того же оранжевого):
var gradient = ctx.createLinearGradient(0, 0, 0, 400);
gradient.addColorStop(0, 'rgba(250,174,50,1)');
gradient.addColorStop(1, 'rgba(250,174,50,0)');
И ваши полные наборы данных:
datasets: [
{
fillColor : gradient, // Put the gradient here as a fill color
strokeColor : "#ff6c23",
pointColor : "#fff",
pointStrokeColor : "#ff6c23",
pointHighlightFill: "#fff",
pointHighlightStroke: "#ff6c23",
data : [25.0,32.4,22.2,39.4,34.2,22.0,23.2,24.1,20.0,18.4,19.1,17.4]
}
]
Смотрите в действии в JSFiddle
Ответ 2
Примечание. Для тех, кто использует более новую версию (v2.7.0) Chart.js, узнайте, что она не работает, пока вы копируете-вставляете @bviale и отвечают обратно на базу кода; Некоторые имена свойств изменены:
fillColor -> backgroundColor
strokeColor -> borderColor
pointColor -> pointBackgroundColor
pointStrokeColor -> pointBorderColor
Вам нужно обновить имена этих свойств, чтобы они работали.
Ссылка: https://github.com/chartjs/Chart.js/blob/master/docs/charts/line.md#dataset-properties
Ответ 3
Для использования в реакции я сделал следующим образом
вам нужно передать идентификатор вашему компоненту, а затем извлечь элемент, используя этот идентификатор
import React, { Component } from 'react'
import { Line } from 'react-chartjs-2'
export default class GraphComponent extends Component{
constructor(props){
super(props)
this.state = {
chartData: {}
}
}
componentDidMount(){
//your code
var ctx = document.getElementById('canvas').getContext("2d")
var gradient = ctx.createLinearGradient(0, 0, 0, 400)
gradient.addColorStop(0, 'rgba(229, 239, 255, 1)')
gradient.addColorStop(1, '#FFFFFF')
const newData = {
labels: [1, 1],
datasets: [
{
label: 'usd',
data: [1,1],
backgroundColor: gradient,
borderColor: this.props.border_color,
pointRadius: 0
}
]
}
this.setState({chartData: newData})
}
//more of your code
render(){
return(
<Line
id='canvas'//you need to give any id you want
data={this.state.chartData}
width={100}
height={30}
options={{
legend: {
display: false
}
}}
/>
)
}
}
это только мой второй ответ, поэтому, пожалуйста, прости меня, если я сделал какие-либо ошибки в письменной форме
Ответ 4
ПРИМЕЧАНИЕ. Скопировано из CODEPEN
Это решение создает красивый градиент вертикального градиента с красной темой
// ============================================
// As of Chart.js v2.5.0
// http://www.chartjs.org/docs
// ============================================
var chart = document.getElementById('chart').getContext('2d'),
gradient = chart.createLinearGradient(0, 0, 0, 400);
gradient.addColorStop(0, 'rgba(255, 0,0, 0.5)');
gradient.addColorStop(0.5, 'rgba(255, 0, 0, 0.25)');
gradient.addColorStop(1, 'rgba(255, 0, 0, 0)');
var data = {
labels: [ 'January', 'February', 'March', 'April', 'May', 'June' ],
datasets: [{
label: 'Custom Label Name',
backgroundColor: gradient,
pointBackgroundColor: 'white',
borderWidth: 1,
borderColor: '#911215',
data: [50, 55, 80, 81, 54, 50]
}]
};
var options = {
responsive: true,
maintainAspectRatio: true,
animation: {
easing: 'easeInOutQuad',
duration: 520
},
scales: {
xAxes: [{
gridLines: {
color: 'rgba(200, 200, 200, 0.05)',
lineWidth: 1
}
}],
yAxes: [{
gridLines: {
color: 'rgba(200, 200, 200, 0.08)',
lineWidth: 1
}
}]
},
elements: {
line: {
tension: 0.4
}
},
legend: {
display: false
},
point: {
backgroundColor: 'white'
},
tooltips: {
titleFontFamily: 'Open Sans',
backgroundColor: 'rgba(0,0,0,0.3)',
titleFontColor: 'red',
caretSize: 5,
cornerRadius: 2,
xPadding: 10,
yPadding: 10
}
};
var chartInstance = new Chart(chart, {
type: 'line',
data: data,
options: options
});
проверить эту ручку https://codepen.io/grayghostvisuals/pen/gpROOz