如何在Chart.js中创建带有背景蒙版的线性渐变

ryevplcw  于 2023-02-12  发布在  Chart.js
关注(0)|答案(1)|浏览(197)

我想在Chart.js中重新创建这个图表配色方案。到目前为止,我已经成功地为笔划和背景颜色创建了水平线性渐变,但我找不到一种方法来为背景颜色创建不透明蒙版,以将其“混合”到页面背景中。
这是我目前的图表

  • 注意:* 我可以使用css属性在画布上创建一个不透明遮罩:

-webkit-mask-image: -webkit-gradient(linear, left 50%, left bottom, from(rgba(0,0,0,1)), to(rgba(0,0,0,0)))
但是这种方法掩盖了图表的整个底部,例如图表的笔划

我该如何着手只屏蔽图表的背景色呢?

Chart.js设置

  1. data = {
  2. labels: labels,
  3. datasets: [
  4. {
  5. label: 'Dataset 1',
  6. fill: true,
  7. data: Utils.numbers(NUMBER_CFG),
  8. borderColor: getGradient,
  9. pointBorderColor: getGradient,
  10. pointBackgroundColor: getGradient,
  11. pointHoverBackgroundColor: getGradient,
  12. pointHoverBorderColor: getGradient,
  13. backgroundColor: getGradient
  14. },
  15. ]
  16. };
  17. let width, height, gradient;
  18. function gradient(ctx, chartArea) {
  19. const chartWidth = chartArea.right - chartArea.left;
  20. const chartHeight = chartArea.bottom - chartArea.top;
  21. if (!gradient || width !== chartWidth || height !== chartHeight) {
  22. // Create the gradient because this is either the first render
  23. // or the size of the chart has changed
  24. width = chartWidth;
  25. height = chartHeight;
  26. var gradientStroke = ctx.createLinearGradient(chartArea.right, chartArea.top, chartArea.left, chartArea.top);
  27. gradientStroke.addColorStop(0, "#80b6f4");
  28. gradientStroke.addColorStop(1, "#f49080");
  29. }
  30. return gradientStroke;
  31. }
  32. function getGradient(context) {
  33. const chart = context.chart;
  34. const {ctx, chartArea} = chart;
  35. if (!chartArea) {
  36. // This case happens on initial chart load
  37. return;
  38. }
  39. return gradient(ctx, chartArea);
  40. }
pbgvytdp

pbgvytdp1#

我希望你现在已经解决了这个问题。无论如何,我认为你应该试着改变你传递给createLinearGradient function的值。参见this example(它不是我的,但是帮助我理解了这一点)。

  1. var ctx = document.getElementById("chart").getContext("2d");
  2. /*** Gradient ***/
  3. var gradient = ctx.createLinearGradient(0, 0, 0, 200);
  4. gradient.addColorStop(0, 'rgba(250,174,50,1)');
  5. gradient.addColorStop(1, 'rgba(250,174,50,0)');
  6. /***************/
  7. var data = {
  8. 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"],
  9. datasets: [
  10. {
  11. fillColor : gradient, // Put the gradient here as a fill color
  12. strokeColor : "#ff6c23",
  13. pointColor : "#fff",
  14. pointStrokeColor : "#ff6c23",
  15. pointHighlightFill: "#fff",
  16. pointHighlightStroke: "#ff6c23",
  17. 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]
  18. }
  19. ]
  20. };
  21. var options = {
  22. responsive: true,
  23. datasetStrokeWidth : 3,
  24. pointDotStrokeWidth : 4,
  25. tooltipFillColor: "rgba(0,0,0,0.8)",
  26. tooltipFontStyle: "bold",
  27. tooltipTemplate: "<%if (label){%><%=label + ' hod' %>: <%}%><%= value + '°C' %>",
  28. scaleLabel : "<%= Number(value).toFixed(0).replace('.', ',') + '°C'%>"
  29. };
  30. var myLineChart = new Chart(ctx).Line(data, options);
  1. <canvas id="chart" width="800" height="400"></canvas>
展开查看全部

相关问题