【问题标题】:Multiple Series Line Color多系列线条颜色
【发布时间】:2015-05-17 22:26:15
【问题描述】:

我有以下实现。它已实现且功能强大。 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"

        },
});

【问题讨论】:

  • 是的,是的;请将相关代码添加到您的问题中。不要依赖我们访问外部网站来帮助您:让我们轻松地为您提供帮助。
  • 我在我的代码中添加了逻辑。
  • 您链接的 Fiddle 似乎什么都不做,并且“datavis.min.css”是 404-ing。您需要在 JS Fiddle 重现您的问题,并在您的问题中发布准确重现您的问题的代码。目前,您已将问题更新为 - 看似 - 更改问题。 添加信息,不要删除它(除非它完全无关和不必要)。
  • 请查看这个dojo.telerik.com/uCIhu

标签: javascript kendo-ui kendo-chart


【解决方案1】:

在一行上获得多种颜色的方法是应用渐变作为描边颜色。在您的 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 元素,因此需要在浏览器开发人员工具中反复试验/寻找合适的选择器。

DEMO

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

【讨论】:

  • 哇,有趣且完美的解决方案。非常感谢 Ezanker。
【解决方案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


编辑:

The official documentation 声明应该将series.color 设置为一个函数,
在你的情况下:color: function(point){return point.value&lt;60 ? "red" : "blue"; }
但是,我不知道为什么这在您的 jsfiddle 中不起作用。

【讨论】:

  • 请参考我的jsfiddle,我的问题其实和kendo-chart有关。
  • 这就是为什么我最初尝试color: function(point){return point.value&lt;60 ? "red" : "blue"; },但没有运气。
  • 我都不是(尽管这是文档中的答案)。我还尝试了十六进制颜色(有和没有#)。我花了将近一个小时,通常我会说“现在它是个人的”并弄清楚,但今天我有很多其他事情要做。然而,我注意到 FF 'Found function where color is expected'中的一些错误。可以尝试加载旧版本的剑道。一个人可以在没有 jsfiddle 的情况下尝试它。我没有想法。后续/新问题的提示:将其归结为文档中的基本示例,验证它不起作用,将其发布为 stacksn-p 并询问它为什么不起作用(我会投票赞成)。
  • 检查这个dojo.telerik.com/uCIhu,我正在工作。 color function 只改变我一直在处理的标记而不是线条颜色。
  • 啊,积分在变,至少是这样。这是一个想法,假设有data: [70, 50, 70]。值 0 和 2 高于您的阈值 60,值 1 低于。你到底想要什么?从 val_0 到 val_1 的红色,从 val_1 到 val_2 的红色?还是红色从 val_0 到 val_1,然后蓝色从 val_1 到 val_2(或相反)?或者一旦超过 60 就改变线(意味着一条线是蓝色,然后是红色(从 val_0 到 val_1),然后下一行是红色,然后是蓝色(从 val_1 到 val_2)。我认为这很重要,如果只是为了进一步缩小你想要的范围。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-19
  • 1970-01-01
  • 1970-01-01
  • 2015-06-22
  • 2016-02-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多