1

我有以下实现。它已实现且功能强大。 http://dojo.telerik.com/uCIhu

但是,我想知道当等级为data[i]<60红色时是否可以更改线条颜色,使其变为data[i]>=60蓝色。

$("#chart").kendoChart({
    series: [{
            name: "Grading",
            color: function(point){return point.value<60 ? "red" : "blue"; },
            width: 1,
            size: 2,
            tooltip: {
                visible: true,
            },
            data: [81, 91, 61, 55, 59, 43, 57, 59, 66, 65, 54, 70, 72.37]}
       ],
   seriesDefaults: {
            type: "line",
            missingValues: "interpolate"

        },
});
4

2 回答 2

2

是的,这是可能的,但是您发布的代码不起作用:

function lineColor()
{
  for(i=0;i<data.length;i++){ 
   if{data[i]<60}
    color="red";
   else{color="blue";}
   }
}

尝试:

function lineColor(){
  for(i=0; i<data.length; i++){ 
    if(data[i]<60) {color="red";}
    else {color="blue";}
  }
}

或者只是一个简单的三元:

function lineColor(){
  for(i=0; i<data.length; i++){ 
    color=data[i]<60) ? 'red' : 'blue';
  }
}

我假设color范围链中有一些标识符。


编辑:

官方文档指出series.color,在您的情况下,应该将其设置为一个函数
color: function(point){return point.value<60 ? "red" : "blue"; }
但是,我不知道为什么这在您的 jsfiddle 中不起作用。

于 2015-05-17T23:12:31.387 回答
2

在一行上获得多种颜色的方法是应用渐变作为描边颜色。在您的 HTML 中的某处,您可以包含一个定义了渐变的隐藏 svg 元素,例如:

  <div style="height: 0px;">
    <svg>
      <defs>    
      <linearGradient id="theGrad" x1="0" x2="0" y1="0" y2="1">
        <stop stop-color="blue" offset="0%"></stop>
        <stop stop-color="blue" offset="40%"></stop>
        <stop stop-color="red" offset="40%"></stop>
        <stop stop-color="red" offset="100%"></stop></linearGradient>
    </defs>
    </svg>
  </div>

注意:您也可以在脚本中创建渐变定义并将其附加到图表 SVG。

然后使用图表小部件的渲染回调将渐变应用于线条:

$("#chart").kendoChart({
    series: [{
       name: "Grading",
       color: function(point){return point.value<60 ? "red" : "blue"; },
       width: 2,
       size: 2,
       tooltip: {
           visible: true,
       },
       data: [81, 95, 61, 55, 59, 5, 57, 59, 66, 65, 54, 70, 72.37]}
   ],
   seriesDefaults: {
       type: "line",
       missingValues: "interpolate"     
   },
   valueAxis: {
       max: 100
   },
   render: function(e) {
       $('#chart svg g [clip-path="url(#kdef2)"] path').css("stroke", "url(#theGrad)");        
   }
});

不幸的是,剑道图表不会将 id 或类应用于各种 svg 元素,因此需要在浏览器开发人员工具中进行一些试验和错误/查找以找出合适的选择器。

演示

同样对于您的实际问题,您需要根据您的实际数据范围计算适当的梯度停止。

于 2015-05-19T19:48:32.827 回答