Kendo UI 条形图数据分组

Posted

技术标签:

【中文标题】Kendo UI 条形图数据分组【英文标题】:Kendo UI BarChart Data Grouping 【发布时间】:2012-11-17 07:50:58 【问题描述】:

不确定这是否可能。在我的示例中,我使用 json 作为源,但这可以是任何大小。在fiddle 的示例中,我将通过仅绑定两列 ProductFamily (xAxis) 和 Value (yAxis) 以共享方式使用此数据,但我希望能够使用聚合对列进行分组。

在这个没有分组的例子中,它显示了 FamilyA 的多个列。 是否可以将其分组为一列并汇总值而不管数据量如何?

所以结果将显示一列 FamilyA 的值 4850 + 4860 = 9710 等?

所有在线示例的一个问题是每个类别的数据量总是正确的。不确定这是否有意义?

http://jsfiddle.net/jqIndy/ZPUr4/3/

//Sample data (see fiddle for complete sample)
[
        "Client":"",
        "Date":"2011-06-01",
        "ProductNumber":"5K190",
        "ProductName":"CABLE USB",
        "ProductFamily":"FamilyC",
        "Status":"OPEN",
        "Units":5000,
        "Value":5150.0,
        "ShippedToDestination":"CHINA"
 ]


var productDataSource = new kendo.data.DataSource(
  data: dr,
  //group: 
  //  field: "ProductFamily",
  //,
  sort: 
    field: "ProductFamily",
    dir: "asc"
  ,
  //aggregate: [
  //       field: "Value", aggregate: "sum" 
  //],
  //schema: 
  //  model: 
  //    fields: 
  //      ProductFamily:  type: "string" ,
  //      Value:  type: "number" ,
  //    
  //  
  //
          )

 $("#product-family-chart").kendoChart(
        dataSource: productDataSource,
        //autoBind: false,
        title: 
          text: "Product Family (past 12 months)"
        ,
        seriesDefaults: 
          overlay: 
            gradient: "none"
          ,
          markers: 
            visible: false
          ,
          majorTickSize: 0,
          opacity: .8
        ,
        series: [
          type: "column",
          field: "Value"
        ],
        valueAxis: 
          line: 
            visible: false
          ,
          labels: 
            format: "$0",
            skip: 2,
            step: 2,
            color: "#727f8e"
          
        ,
        categoryAxis: 
          field: "ProductFamily"
        ,
        legend: 
          visible: false
        ,
        tooltip: 
          visible: true,
          format: "Value: $0:N0"
        
      );​

【问题讨论】:

我正在尝试创建一个包含大量图表的仪表板,为了提供这种终极响应能力,我认为最好创建一个包含所有数据的大 json 文件,但似乎这种方法不是可能的。然后可以在所有图表之间共享此文件,但由于每个图表的结构如此不同,我必须为每个图表创建一个 json 文件。 这可能对你有帮助jsfiddle.net/v8tsQ/42 这个问题是如果您在同一季度的同一公司的 json 中有另一个项目,这将显示为条形图上的附加列。如何将此总数添加到现有的 2011Q2 中,以便它仍然仅显示 1 列,总数为 1 + 145 = 146? “CompanyId”:201,“GroupName”:“Constellation”,“SectionName”:“CCLF”,“FindingQuarter”:“2011Q2”,“DataElement”:“Total”,“DataValue”:“”,“Total”: 145, 【参考方案1】:

Kendo UI 图表不支持绑定到组聚合。至少现在还没有。

我的建议是:

    移动聚合定义,以便按组计算:

    group: 
        field: "ProductFamily",
        aggregates: [ 
            field: "Value",
            aggregate: "sum"
         ]
     
    

    在更改处理程序中提取聚合值:

    var view = products.view();
    var families = $.map(view, function(v) 
        return v.value;
    );
    var values = $.map(view, function(v) 
        return v.aggregates.Value.sum;
    );
    

    手动绑定组和类别:

    series: [ 
        type: "column",
        data: values
    ],
    categoryAxis: 
        categories: families
    
    

工作演示可以在这里找到:http://jsbin.com/ofuduy/5/edit

我希望这会有所帮助。

【讨论】:

这太棒了。非常感谢!

以上是关于Kendo UI 条形图数据分组的主要内容,如果未能解决你的问题,请参考以下文章

Kendo UI-如何更改条形图中 X 轴的颜色

ggplot2:3路交互堆积条形图的分组条形图

带有分组条形的熊猫堆积条形图[重复]

生成python按图分组的条形图时间序列

Python使用matplotlib绘制柱状图(bar plot)实战:水平条形图垂直条形图分组条形图堆叠条形图

并排条形图与列按比例分组(相对频率条形图)