2012-04-13 60 views
11

Tôi đang thay thế biểu đồ lưới chấm của tôi bằng KendoUI. Tôi đang hiển thị biểu đồ Phân phối điểm. Tôi muốn tất cả các thanh có cùng màu trừ thanh có điểm trung bình và Legend. Làm thế nào để tô màu một thanh duy nhất một màu? Làm thế nào tôi sẽ tô màu cho Huyền thoại màu mới này?Làm thế nào để bạn tạo một thanh màu khác trong biểu đồ thanh KendoUI?

Dưới đây là biểu đồ thanh biểu đồ chấm điểm cũ của tôi và bên dưới là biểu đồ KendoUI mới mà tôi đang cố gắng thay thế. Tôi chỉ cần có được màu đó đúng và chúng tôi sẽ kinh doanh. Bất kỳ trợ giúp được đánh giá cao.

enter image description here

Trả lời

18

Cập nhật: Tôi đi đây là câu trả lời dưới đây dòng này còn nguyên vẹn trong trường hợp có những người ra có người đang sử dụng một phiên bản cũ, nhưng per a later comment, KendoUI bây giờ cho phép bạn ghi đè lên phong cách cho điểm cá nhân trong một loạt.


Tôi không tin rằng bạn có thể, trong phiên bản hiện tại. Điều đó nói rằng, bạn có thể hack theo cách của bạn xung quanh giới hạn.

Bạn cần tạo hai chuỗi dữ liệu - một cho dữ liệu được đánh dấu của bạn và một cho mọi thứ khác. Thêm cả hai vào biểu đồ của bạn và đặt chúng thành xếp chồng lên nhau.

Dưới đây là một jsFiddle tôi đặt lại với nhau để minh họa: http://jsfiddle.net/LyndsySimon/9VZdS/. Nó phụ thuộc vào CDN của KendoUI, vì vậy nếu nó phá vỡ trong tương lai tôi xin lỗi.

Đây là Javascript để tham khảo:

$(function() { 
    var dataset = new Array(1,2,3,null,5,6); 
    var highlighted = new Array(null,null,null,4,null,null); 

    $('#chart').kendoChart({ 
     theme: 'metro', 
     seriesDefaults: { 
      type: 'column', 
      stack: true 
     }, 
     series: [ 
      { 
       name: 'Not Highlighted', 
       data: dataset, 
       color: '#609' 
      }, 
      { 
       name: 'Highlighted', 
       data: highlighted, 
       color: '#f03' 
      } 
     ] 
    }) 
});​ 
+1

Perfect. Cảm ơn bạn đã làm việc xung quanh. Bạn nhận được +1 và khi 22 giờ của tôi đã hết, tôi sẽ trao cho bạn tiền thưởng. Tôi sẽ đề nghị bạn có được một tài khoản thực sự cho điều đó;) – Chev

0

Đây không phải là hiện nay có thể với phiên bản KendoUI hiện hành.

Đó là danh sách cần làm của họ.

http://www.kendoui.com/forums/dataviz/chart/change-bar-column-color-for-each-point.aspx

Có thể có một loại khắc phục, như đã nói trong thread Tôi đã đặt ở đây, nó sẽ là để mô tả một loạt cho mỗi màu mà bạn cần. Nó trông rất kém hiệu quả với tôi, nhưng nó hiện là cách duy nhất để làm điều đó. Nếu bạn chỉ có 1 biểu đồ, bạn có thể làm điều đó. Khác, chờ một phiên bản mới của KendoUI với tính năng này.

+0

Nếu bạn phải làm điều này rất nhiều, LaGrandMere làm cho một điểm tốt. Tôi muốn tạo một hàm bao bọc và mở rộng các tùy chọn cấu hình của Kendo để xử lý việc này. Sau đó, khi Kendo giới thiệu tính năng này, bạn chỉ có thể cấu trúc lại trình bao bọc để sử dụng cài đặt gốc và tiếp tục với ngày của bạn. –

1

Bạn có thể hack SVG do hệ thống tạo. Tôi đã cung cấp biểu đồ với một mô hình có chứa màu cho mỗi thanh. ví dụ:

public class Model 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public string Code { get; set; } 
    public string Colour { get; set; } 
    public decimal Score { get; set; } 
} 

Được sử dụng làm hàng loạt trên biểu đồ. Chế độ xem sau đó trông giống như:

@(Html.Telerik().Chart(Model) 
    .Name("AverageScores") 
    .Theme("Simple") 
    .HtmlAttributes(new {style = "height: 500px"}) 
    .Series(series => series.Column(s => s.Score).Name("Name").Color("Blue")) 
    .SeriesDefaults(sd => sd.Column().Labels(l => 
               { 
                l.Visible(true); 
                l.Format("{0}%"); 
               })) 
    .Title("Mean Percentage Scores") 
    .Legend(builder => 
       { 
        builder.Position(ChartLegendPosition.Bottom); 
        builder.Visible(false); 
       }) 
    .CategoryAxis(ca => ca.Categories(x => x.Code)) 
    .Tooltip(builder => 
       { 
        builder.Visible(true); 
        builder.Format("{0}%"); 
        builder.Template("<#= dataItem.Name #><br/><#= value #>%"); 
       }) 
    .ValueAxis(va => va.Numeric().Labels(a => a.Format("{0}%")).Min(0).Max(100) 
    ) 
) 

@section BelowTelerikScriptRegistrar 
{ 
<script type="text/javascript"> 


    function setAverageScoresColours() { 
     var data = $('#AverageScores').data("tChart").options.series[0].dataItems; 
     if (data != null) { 
      for (var i = 0; i < data.length; i++) { 
       var averageScore = data[i]; 
       $($($('div#AverageScores svg g')[i]).children('path')[0]).attr('fill', '#' + averageScore.Colour); 
       $($($('div#AverageScores svg g')[i]).children('path')[0]).attr('stroke', '#' + averageScore.Colour); 
      } 
     } 
    } 

    $(document).ready(function() { 
     setAverageScoresColours(); 
    }) 
</script> 
} 

Phần dướiTelerikScriptRegistrar phải xảy ra sau khi Html.Telerik(). ScriptRegistrar() được gọi.

Điều này sẽ hoạt động trong Chrome, Firefox và IE10. Tôi đã nhận thấy có một vấn đề với nhiều biểu đồ và thời gian xung quanh việc tạo ra SVG. Thật không may, bạn có thể phải đặt setAverageScoresColours() trong một hàm setTimeout để đảm bảo SVG đã được tạo, nhưng có vẻ như nó chỉ hoạt động với một biểu đồ.

Một chút hacky, nhưng dễ hơn là quản lý nhiều chuỗi.

Và đối với KendoUI (tôi đã chỉnh sửa cho ...):

<div class="chart-wrapper"> 
    <div id="chart"></div> 
</div> 

<script> 
function createChart() { 
    $("#chart").kendoChart({ 
     theme: $(document).data("kendoSkin") || "default", 
     title: { 
      text: "Internet Users" 
     }, 
     legend: { 
      position: "bottom" 
     }, 
     seriesDefaults: { 
      type: "column" 
     }, 
     series: [{ 
      name: "World", 
      data: [15.7, 16.7, 20, 23.5, 26.6] 
     }], 
     valueAxis: { 
      labels: { 
       format: "{0}%" 
      } 
     }, 
     categoryAxis: { 
      categories: [2005, 2006, 2007, 2008, 2009] 
     }, 
     tooltip: { 
      visible: true, 
      format: "{0}%" 
     } 
    }); 
} 

$(document).ready(function() { 
    setTimeout(function() { 
     // Initialize the chart with a delay to make sure 
     // the initial animation is visible 
     createChart(); 
     $($($('div#chart svg g')[0]).children('path')[0]).attr('fill', '#123'); 
     $($($('div#chart svg g')[1]).children('path')[0]).attr('fill', '#321'); 
     $($($('div#chart svg g')[2]).children('path')[0]).attr('fill', '#213'); 
     $($($('div#chart svg g')[3]).children('path')[0]).attr('fill', '#312'); 
     $($($('div#chart svg g')[4]).children('path')[0]).attr('fill', '#132'); 
    }, 400); 
}); 
</script> 
15

Bắt đầu với việc phát hành Q2, thanh loạt hỗ trợ gắn màu điểm vào trường mục dữ liệu.

Điều này được thực hiện thông qua colorField option. Ví dụ trực tuyến Binding to local data minh họa nó.

Cả UI Kendo và giấy gói di sản cho ASP.NET MVC phơi bày nó như là một tùy chọn:

.Series(series => 
{ 
    series.Bar(model => model.Value, model => model.Color) 
     .Name("United States"); 
}) 

Tất cả quá tải loạt có thể được nhìn thấy here.

+0

Tuyệt vời. Tôi đã cập nhật câu trả lời được chấp nhận để trỏ đến nhận xét của bạn. –

0

Một cách khác bạn có thể làm điều đó trong thời gian chạy là sử dụng chức năng mà trả về màu sắc.

API reference

Dưới đây là một ví dụ mã:

<div id="chart"></div> 
<script> 
$("#chart").kendoChart({ 
    series: [{ 
    data: [1, 2], 
    color: function(point) { 
     if (point.value > 1) { 
     return "red"; 
     } 

     // use the default series theme color 
    } 
    }] 
}); 
</script> 
Các vấn đề liên quan