2015-09-25 22 views
17

Tôi đang sử dụng Ext 5 và muốn tô màu các đoạn trong biểu đồ đường dựa trên các giá trị. Hiển thị dòng màu xanh lá cây nếu giá trị lớn hơn mục tiêu nếu không thì màu đỏ.Biểu đồ đường có nhiều đoạn màu

Có cách nào để thay đổi màu của đoạn đường trong biểu đồ Đường nhánh dựa trên giá trị của nó không?

tôi có thể thấy rằng không có built-in cách để làm điều này trong sencha từ này link

Tôi cũng đã cố gắng thêm một dòng sprite động trên đường để thực hiện một tác động của màu sắc khác nhau. Nó đã làm việc. Nhưng tôi không thể tìm được tọa độ x, y chính xác để vẽ dòng tùy chỉnh này một cách linh động.

Đây là mã tôi đã thử cho đến thời điểm này.

Ext.onReady(function() {  
    var data = [{ 
     'date': '1', 
     'data2': 4 
    }, { 
     'date': '2', 
     'data2': 8 
    }, { 
     'date': '3', 
     'data2': 12 
    }, { 
     'date': '4',   
     'data2': 6 
    }, { 
     'date': '5', 
     'data2': 36 
    }]; 

    Ext.create('Ext.chart.Chart', { 
     renderTo: Ext.getBody(), 
     width: 500, 
     height: 300, 
     store: { 
      fields: ['name', 'data2'], 
      data: data 
     }, 
     listeners: { 
      redraw: function(){ 
       var chart = this; 
       var series = chart.series[0]; 
       var dataRange = series.dataRange; 
       var large = dataRange.find(function(v){ return v>14 }); 
       if(large){ 
        var line = series.getSurface().add({ 
         type: 'line', 
         fromX: 354, 
         fromY: 75, 
         toX: 465, 
         toY: 257, 
         zIndex: 2000, 
         stroke: 'green', 
         'stroke-width': 2, 
        }).show(true); 
       }       
      } 
     }, 
     axes: [{ 
      type: 'numeric', 
      position: 'left', 
      fields: ['data2'], 
      title: { 
       text: 'Stores Visited', 
       fontSize: 15 
      }, 
      grid: true, 
      minimum: 0 
     }, { 
      type: 'category', 
      position: 'bottom', 
      fields: ['date'], 
      title: { 
       text: 'Date', 
       fontSize: 15 
      } 
     }], 
     series: [{ 
      type: 'line', 
      style: { 
       stroke: 'red', 
       lineWidth: 2 
      }, 
      xField: 'date', 
      yField: 'data2' 
     }] 
    }); 
}); 

enter image description here

Trả lời

1

Trên thực tế, thay đổi màu sắc của toàn bộ dòng, (đó là giữa mỗi số liệu) không phải là khó khăn. Vấn đề là làm thế nào để thay đổi màu sắc của dòng phần. Để khắc phục vấn đề này, tôi đã tạo ra các ranh giới dữ liệu (đẩy các mục ranh giới để lưu trữ). Tôi không chắc Nó sẽ hữu ích cho bạn. Thật không may, tôi không có ý tưởng nào ngoại trừ điều này. Dù sao, xin vui lòng kiểm tra này fiddle: https://fiddle.sencha.com/#fiddle/v0d

var data = [{ 
      'name': 'metric one', 
      'data2': 4 
     }, { 
      'name': 'metric two', 
      'data2': 8 
     }, { 
      'name': 'metric three', 
      'data2': 20 
     }, { 
      'name': 'metric four', 
      'data2': 12 
     }, { 
      'name': 'metric five', 
      'data2': 18 
     }, { 
      'name': 'metric six', 
      'data2': 24 
     }, { 
      'name': 'metric seven', 
      'data2': 36 
     }]; 
     var newData = []; 
     Ext.each(data, function(dt, index) { 

      newData.push(dt); 
      if((index != data.length-1) && dt.data2 < 14 && 14 < data[index+1].data2) { 
       newData.push({'data2': 14, name: index}); 
      }  
     }); 

     Ext.create('Ext.chart.Chart', { 
      renderTo: Ext.getBody(), 
      width: 500, 
      height: 300, 
      store: { 
      fields: ['name', 'data2'], 
       data: newData 
      }, 
      axes: [{ 
       type: 'numeric', 
       position: 'left', 
       fields: ['data2'], 
       title: { 
        text: 'Sample Values', 
        fontSize: 15 
       }, 
       grid: true, 
       minimum: 0 
      }, { 
       type: 'category', 
       position: 'bottom', 
       fields: ['name'], 
       title: { 
       text: 'Sample Values', 
       fontSize: 15 
      } 
      }], 
      series: [{ 
       type: 'line', 
       style: { 
        lineWidth: 2, 
        maxBarWidth: 30, 
        stroke: 'red' 
       }, 
       renderer: function(sprite, config, rendererData, index) { 

        var store = rendererData.store, 
        storeItems = store.getData().items, 
        record = storeItems[index], 
        prev = storeItems.length - 2, 
        last = storeItems.length - 1, 
        changes = {}; 
        if (!record) { 
         return; 
        } 
        if (record.get('data2') > 14) { 
         changes.strokeStyle = 'green'; 
        } else { 
         changes.strokeStyle = 'red'; 
        } 
        return changes; 
       }, 
       xField: 'name', 
       yField: 'data2' 
      }] 
     }); 
+1

Tôi đã thử điều này. Nhưng vì trục x của tôi đại diện cho ngày và không phải là giá trị số, tôi không thể tùy chỉnh dữ liệu như trong fiddle của bạn. – Gilsha

+0

@Gilsha Bạn có thể dễ dàng chuyển đổi ngày thành số hoặc ngược lại với mục đích vẽ đồ thị. Nếu bạn đang sử dụng 'Date' được tích hợp sẵn của JavaScript, các phương thức chuyển đổi là [' date.getTime() '] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getTime) và ['Date (giá trị) mới') (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date). –

Các vấn đề liên quan