使用ECharts 实现类似github的Punch Card 图

思路:

使用ECharts的Demo 里混搭图中的散饼图的思想

效果:

图1:ECharts散饼图

图2:github Punch Card图

图3:使用ECharts实现的效果图

HTML代码:

<div id="chart1" style="height:350px;"></div>

<script type="text/javascript">
    var myChart1;
    var sData1 = (function () {
        var data = [[79,66,91,65,85,77,42,56,84,52,33,52,49,19,0,0,0,6,31,22,103,83,60,87],
                    [78,90,77,61,35,53,81,35,59,61,17,9,42,0,0,0,2,9,6,13,15,16,18,50],
                    [3,26,12,23,45,51,98,102,84,56,74,30,25,15,4,0,1,0,2,2,11,5,8,6],
                    [9,17,24,33,32,121,69,106,88,73,56,41,53,25,0,1,14,3,0,2,2,2,3,1],
                    [2,24,15,31,57,45,101,83,110,61,52,38,27,7,0,4,3,8,1,8,0,2,12,3],
                    [8,52,39,49,29,55,107,75,73,30,64,32,34,29,1,3,6,3,12,9,6,15,4,3],
                    [31,62,42,70,23,32,68,68,41,71,70,35,18,17,4,0,2,3,36,79,97,86,59,74]];
        var d = [];
        var len = 24*7;
        var value;
        for(var i=0;i<data.length;i++){
            for(var j=0;j<data[0].length;j++)
                d.push([j,i,data[i][j]]);
        }
        return d;
    })();
    var option1 = {
        color : ['rgba(255, 69, 0, 0.5)'],
        title : {
            text: 'Punch Card of mahmoud',
            subtext : 'San Jose[UTC/GMT -6]'
        },
        tooltip : {
            trigger: 'item',
            formatter: "{b} : {c}"
        },
        toolbox: {
            show : true,
            feature : {
                restore : {show: true},
                saveAsImage : {show: true}
            }
        },
        xAxis : [
            {
                type: 'category',                   // 坐标轴类型,横轴默认为类目轴,数值轴则参考yAxis说明
                data: ['12a', '1a', '2a', '3a', '4a', '5a', '6a', '7a', '8a', '9a', '10a', '11a','12p', '1p', '2p', '3p', '4p', '5p', '6p', '7p', '8p', '9p', '10p', '11p'],
                axisTick:{
                    show:false
                },
                axisLine:{
                    show:false,
                },
            }
        ],
        yAxis : [
            {
                type: 'category',                   // 坐标轴类型,横轴默认为类目轴,数值轴则参考yAxis说明
                data: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
                axisTick:{
                    show:false
                },
                axisLine:{
                    show:false,
                },
            }
        ],
        animation: false,
        series : [
            {
                type:'scatter',
                symbol: 'none',
                data: sData1
            },
            //{
            //    type:'scatter',
            //    symbol: 'none',
            //    data: sData2
            //}
        ]
    };
require.config({
        paths: {
            echarts: './js'
        }
    });

    require(
        [
            'echarts',
            'echarts/chart/pie',
            'echarts/chart/line',
            'echarts/chart/scatter'
        ],
        function (ec) {
            //--- 折柱 ---
            myChart1 = ec.init(document.getElementById('chart1'));
            myChart1.setOption(option1);
        }
    );

function buildPieSeries(){
        var xAxis1 = myChart1.component.xAxis.getAxis(0);
        var yAxis1 = myChart1.component.yAxis.getAxis(0);
        var len1 = sData1.length;
        //option.series = option.series.slice(0,2);
        //option.legend = {
        //    data : ['系列1', '系列2']
        //};
        while (len1--) {
            option1.series.push({
                type: 'pie',
                itemStyle : {
                    normal : {
                        label : {
                            show : false
                        },
                        labelLine : {
                            show : false
                        }
                    }
                },
                radius : Math.round(sData1[len1][2]/150*21),
                center: [
                    xAxis1.getCoordByIndex(sData1[len1][0]),
                    yAxis1.getCoordByIndex(sData1[len1][1])
                ],
                data: [
                    {name: 'contributions', value: sData1[len1][2]}
                ]
            })
        }
        option1.animation = true;
        myChart1.setOption(option1, true);
        window.onresize = buildPieSeries;
    }
    // 构造出一系列的饼图代替原来的散点,需要在散点画出来后才能获取到散点的坐标,setTimeout!
    setTimeout(buildPieSeries, 100);
    </script>

说明:

1.ECharts 散饼图Demo中是用pie图取代散点图中的点,因此Demo中pie图有两组数据,这里根据需求只导入一组数据。

2.buildPieSeries函数用来将数组中的数据以pie图的形式添加到option.series中

3.将源数据数组转化为形为[[positionx,positiony,value],] 的二维中间数组,然后在buildPieSeries函数中根据positionx,positiony获取pie图圆心坐标,根据value确定pie图半径。

4.注意源数组数据 与 图中数据对应。这个例子中根据需求,源数组中数据与图中数据y轴相反。

5.使用的ECharts包版本是2.2.1 文件路径示意:

--js

|-chart

|-bar.js

|-pie.js

...

|-echarts.js

--index.html

时间: 2024-10-26 22:28:41

使用ECharts 实现类似github的Punch Card 图的相关文章

github(其他类似github)下载到本地配置

首先是先装完插件,低版本的myeclipse要自己装插件, 如何使window->show view->other找到git 注意是选第二个... 然后next->next->finish 得到一个目录 然后 项目右键import项目 OK,可以在项目树里面查看. 注意,一个一个项目里面有多个子项目的话则选择 第三个 import as general project

[团队项目]Github生成燃尽图的方式

经过一晚上折腾,终于算是把linux上成功生成了我们团队项目的燃尽图,效果还是不错,在过程中又发现了另一种生成燃尽图的方式,也是基于一个开源项目. 1.准备: 首先你的项目一定要有milestone.你可以按如下步骤建立一个milestone: 点击项目主页Issues进入Issues页面: 点击标签页中的MileStone标签,然后点击右侧的New milestone按钮新建一个MileStone. 在Title里可以写“α版本”或者你们其他预计要达到的版本即可,在描述中可以写项目的验收标准或

ECharts学习(2)--饼状图之南丁格尔图

1.上一篇中讲了如何绘制一个简单的柱状图,这次要画的是饼图,饼图主要是通过扇形的弧度表现不同类目的数据在总和中的占比,它的数据格式比柱状图更简单,只有一维的数值,不需要给类目.因为不在直角坐标系上,所以也不需要xAxis,yAxis. 2.itemStyle都会有normal和emphasis两个选项,normal选项是正常展示下的样式,emphasis是鼠标 hover 时候的高亮样式.也可以把阴影的效果设置在hover的时候. 3.背景色是全局的,所以直接在 option 下设置backgr

Echarts:X轴不等距折线图

来源:https://blog.csdn.net/flygoa/article/details/73090369```html:run<!DOCTYPE html><html lang="en"><head> <meta charset="utf-8"> <title>不等距折线图</title> <script src="https://cdn.bootcss.com/echa

利用PicGo、GitHub和jsDelivr搭建图床

一个高速稳定的图床对于每一个写博客的人来说都很重要,之前大部分人的选择可能都是利用微博搭建图床,但是从2019年4月开始微博开启了防盗链,导致所有依赖微博图床的图片全部无法显示. 利用PicGo将图片上传到GitHub仓库,再使用jsDelivr优化对于我们来说会是一个不错的选择. 准备 PicGo PicGo在GitHub上提供了MacOS.Linux.Windows三个系统版本的下载 一个用来存放图片的GitHub仓库 具体步骤 新建一个GItHub仓库 生成Token github--se

github生成燃尽图

一.     前期准备工作. 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8添加标签 二.     修改进度 2.1进入milestone,编辑 可以看到上面有bug标签,进入并解决 三.查看进度 3.1 打开网址http://radekstepan.com/burnchart/#!/ 3.2 3.3相对路径 3.4查看燃尽图

类似百度首页搜索静态图

1 <!DOCTYPE html> 2 <html xmlns="http://www.w3.org/1999/xhtml"> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> 5 <title></title> 6 <link href="css/d

GitHub上史上最全的Android开源项目分类汇总

今天在看博客的时候,无意中发现了@Trinea在GitHub上的一个项目Android开源项目分类汇总,由于类容太多了,我没有一个个完整地看完,但是里面介绍的开源项目都非常有参考价值,包括很炫的界面特效设计.个性化控件.工具库.优秀的Android开源项目.开发测试工具.优秀个人和团体等.可以这样说,每一位Andorid开发人员都能从中找到一个或多个适用自己项目的解决方案,消化吸收并加以利用,可以为自己的APP增色不少.文章最后还列出了部分国外著名Android开发者的信息,包括GitHub地址

Android常用酷炫控件(开源项目)github地址汇总

转载一个很牛逼的控件收集贴... 第一部分 个性化控件(View) 主要介绍那些不错个性化的 View,包括 ListView.ActionBar.Menu.ViewPager.Gallery.GridView.ImageView.ProgressBar.TextView.ScrollView.TimeView.TipView.FlipView.ColorPickView.GraphView.UI Style 等等. 一.ListView android-pulltorefresh一个强大的拉动