用旭日图展示数据的三种方法

什么是旭日图?

旭日图(Sunburst Chart)是一种现代饼图,它超越传统的饼图和环图,能表达清晰的层级和归属关系,以父子层次结构来显示数据构成情况。旭日图中,离远点越近表示级别越高,相邻两层中,是内层包含外层的关系。

在实际项目中使用旭日图,可以更细分溯源分析数据,真正了解数据的具体构成。而且,旭日图不仅数据直观,而且图表用起来特别炫酷,分分钟拉高数据汇报的颜值!很多数据场景都适合用旭日图,比如,在销售汇总报告中,方便看到每个店铺的销售业绩分布(如下图):

做旭日图的三种方法

1. 用Excel(2016最新版才有旭日图功能)

第一步,创建数据

第二步,点击插入选项,选择“图表”右下方的箭头

第三步,在弹出的对话框中选择“所有图表”,然后选择旭日图

第四步,点击确定,旭日图就创建完成了。所有的数据以及层级关系都一目了然了。

2. 用Spread Studio表格控件

Spread Studio表格控件是一个功能和Excel类似的表格控件,用于在应用系统中实现表格数据录入和编辑等交互功能,并且提供灵活的定制能力和丰富的数据可视化效果。

在Spread Studio V10 版本中, Windows Forms 和 ASP.NET 平台都新增了旭日图,实现方法也很简单,用Spread设计器,和在Excel中一样,只需要选择数据源,插入旭日图即可。

第一步,创建数据

第二步,选择旭日图样式

第三步,创建旭日图,即可

3. 用Wijmo 前端控件集

Wijmo是新一代JavaScript控件集,具有快如闪电,触控优先的特点,能为企业应用提供更加灵活的操作体验,是全球率先支持Angular 的控件集。

我们尝试用Wijmo 做一张复杂的元素周期表。传统的元素周期表展示了元素的信息,但是没有很好的展示元素归类的信息。我们现在用旭日图来做它,对这点进行改善。

传统的元素周期表

用Wijmo 旭日图样式做出来的元素周期表

仅需3步:

第一步,引入Wijmo 相关的样式和js文件

1、引入自定义的js文件

<script src="scripts/DataLoader.js"></script><script src="scripts/app.js"></script>

2、定义一个DIV

<div id="periodic-sunburst" class="periodic-sunburst"></div>

第二步,DataLoader.js,获得数据

创建了一个DataLoader类,其中提供两个方法。readFile方法读取json文件获得数据。isInclude 方法判断数组中是否存在指定的元素。generateCollectionView方法中对数据进行加工处理。

var DataLoader = {};// 一级分类var METALS_TITLE = "金属";var NON_METALS_TITLE = "非金属";var OTHERS_TITLE = "过渡元素";// 二级分类var METAL_TYPES = ‘碱金属|碱土金属|过渡金属|镧系元素|锕系元素|其他金属‘.split(‘|‘);var NON_METAL_TYPES = ‘惰性气体|卤素|非金属‘.split(‘|‘);var OTHER_TYPES = ‘准金属|超锕系‘.split(‘|‘);
DataLoader = {
    readFile: function (filePath, callback) {        var reqClient = new XMLHttpRequest();
        reqClient.onload = callback;
        reqClient.open("get", filePath, true);
        reqClient.send();
    },
    isInclude: function (arr, data) {        if (arr.toString().indexOf(data) > -1)            return true;        else
            return false;
    },
    generateCollectionView: function (callback) {
        DataLoader.readFile(‘data/elements.json‘, function (e) {            // 获取数据
            var rawElementData = JSON.parse(this.responseText);            var elementData = rawElementData[‘periodic-table-elements‘].map(function (item) {
                item.properties.value = 1;                return item.properties;
            });            var data = new wijmo.collections.CollectionView(elementData);            //  利用wijmo.collections.PropertyGroupDescription 进行第一级分组
            data.groupDescriptions.push(new wijmo.collections.PropertyGroupDescription(‘type‘, function (item, prop) {                if (DataLoader.isInclude(METAL_TYPES, item[prop])) {                    return METALS_TITLE;
                } else if (DataLoader.isInclude(NON_METAL_TYPES, item[prop])) {                    return NON_METALS_TITLE;
                } else {                    return OTHERS_TITLE;
                }
            }));            // 进行第二级分组
            data.groupDescriptions.push(new wijmo.collections.PropertyGroupDescription(‘type‘, function (item, prop) {                return item[prop];
            }));
            callback(data);
        });
    }
};

generateCollectionView方法中调用readFile获得json数据,之后利用Wijmo中提供的CollectionView对数据进行2级分组。第1级是金属、非金属、过渡元素。第2级分别是他们的子级别。第3级是元素,每个元素的Value都是1,表示元素的占比相同。

第三步,app.js,数据分组

和前边的简单示例相比,这里绑定的数据源是CollectionView.Groups,它是CollectionView中的第一级分组。

var mySunburst;
function setSunburst(elementCollectionView) {    // 创建旭日图控件
    mySunburst = new wijmo.chart.hierarchical.Sunburst(‘#periodic-sunburst‘);
    mySunburst.beginUpdate();    // 设置旭日图的图例不显示
    mySunburst.legend.position = ‘None‘;    // 设置内圆半径
    mySunburst.innerRadius = 0.1;    // 设置选择模式
    mySunburst.selectionMode = ‘Point‘;    // 设置数据显示的位置
    mySunburst.dataLabel.position = ‘Center‘;    // 设置数据显示的内容
    mySunburst.dataLabel.content = ‘{name}‘;    // 进行数据绑定
    mySunburst.itemsSource = elementCollectionView.groups;    // 包含图表值的属性名
    mySunburst.binding = ‘value‘;    // 数据项名称
    mySunburst.bindingName = [‘name‘, ‘name‘, ‘symbol‘];    // 在分层数据中生成子项的属性的名称。
    mySunburst.childItemsPath = [‘groups‘, ‘items‘];
    mySunburst.endUpdate();
};
DataLoader.generateCollectionView(setSunburst);

以上就是用旭日图展示数据的三种方法,供大家参考。

时间: 2024-12-08 16:33:58

用旭日图展示数据的三种方法的相关文章

Node.JS的表单提交及OnceIO中接受GET/POST数据的三种方法

OnceIO 是 OnceDoc 企业私有内容(文档)管理系统的底层Web框架,它可以实现模板文件.静态文件的全缓存,运行起来完全不需要I/O操作,并且支持客户端缓存优化,GZIP压缩等(只压缩一次),拥有非常好的性能,为您节约服务器成本.它的模块化功能,可以让你的Web进行分布式存储,在一个扩展包里即可包含前端.后端和数据库定义,只需通过添加/删除目录的方式就可实现功能删减,实现真正的模块化扩展.目前 OnceIO 已经开源,本文主要介绍node.js语言中的表单提交及OnceIO中接受GET

去除DataTable重复数据的三种方法

其中要避免目标库插入重复数据.这重复数据可能是源数据库本身就有重复数据,还有就是已经插入避免重复插入. 过滤自身重复数据解决方案 第一种:采用DataView.ToTable()方法 DataView.ToTable 方法 .NET Framework 2.0 其根据现有 DataView 中的行,创建并返回一个新的 DataTable. 重载列表 名称 说明 DataView.ToTable () 根据现有 DataView 中的行,创建并返回一个新的 DataTable. 由 .NET Co

OpenCV笔记(二)——查看Mat对象的数据的三种方法

我们有了Mat的对象之后,就可以开始对图像进行处理. 在图像的处理过程中,对数据的查看并且对其进行修改,这应当是比较频繁的操作了. 这里讲讲官方手册当中给出的三种方法. 第一种方法:使用指向Mat数据部分的指针. 代码如下: 1 Mat& ScanImageAndReduceC(Mat& I, const uchar* const table) 2 { 3 // accept only char type matrices 4 CV_Assert(I.depth() != sizeof(u

php获取POST数据的三种方法

方法一,$_POST $_POST或$_REQUEST存放的是PHP以key=>value的形式格式化以后的数据. $_POST方式是通过 HTTP POST 方法传递的变量组成的数组,是自动全局变量.如使用$_POST['name']就可以接收到网页表单以及网页异步方式post过来的数据,即$_POST只能接收文档类型为Content-Type: application/x-www-form-urlencoded提交的数据. 方法二,使用file_get_contents("php://

什么是ViewData的, ViewBag和TempData? - MVC为当前和后续请求之间传递数据的三种方法

原文出处:http://www.codeproject.com/Articles/476967/WhatplusisplusViewData-cplusViewBagplusandplusTem ASP.NET MVC提供3种选择ViewData,ViewBag,TempData来从controller到View及后续请求传输数据. ViewData和ViewBag很相似,而TempData有所不同. 让我们来讨论或总结三者的要点: ViewBag 和 ViewData的区别: ViewData

python抓取网页数据的三种方法

一.正则表达式提取网页内容 解析效率:正则表达式>lxml>beautifulsoup 代码: import  re import  urllib2 urllist  = 'http://example.webscraping.com/places/default/view/United-Kingdom-239' html =  urllib2.urlopen(urllist).read() num =  re.findall('<td class="w2p_fw"&

java基础课程_数据交换三种方法

//方法一  int c = n;  n=m;  m=c;  //测试   System.out.println("n="+n+"\nm="+m);      //方法 二用 +-做交换  int x=10,y=5;  x=x+y;  //5+20  y=x-y;  //25-20  x=x-y;  //25-5  System.out.println("x="+x+"\ny="+y);    //方式三 异或效率最高  in

js判断数组是否有重复数据的三种方法

var arr=new Array("aa","bb","cc","dd","aaa","aa"); // 方法1:取出数组中的一个值,与其之后的数据挨个比对>>>最容易想到,但运算最麻烦 var method1=function(array){ for(var i=0;i<array.length-1;i++) { for(var j=i+1;j<arra

小程序跨页面传递data数据的三种方法

Q:小程序怎么把页面data里的数据传到另外的页面? 或者小程序怎么吧表单里的数据传到另外的页面?A:1.可以使用url传递数据. 例如在A页面中传递数据,需要注意的是,wx.switchTab中的url不能传参数. wx.navigateTo({url:‘../pageB/pageB?name=raymond&gender=male’}).在B页面中接收数据,通过onLoad的option:Page({onLoad:function(option){console.log(option.nam