html5---svg(折现数据表格)

上一篇我们说了如何画圆饼。这一次我们说如何做折线图。网上有个库chartist.js做svg矢量数据的一个库。里面有个折现统计,我没有做的和他一样,因为我也不是很熟悉svg.权当先试试水而已,所以写的不好.望各位指教。上代码!!!!!!!!!!!

(function(){
    function svg(option){
        this.config = this.extend(this.config,option);
        /*表格生成*/
        this.crateform();
        this.holaddata();
        this.holdfn();
        this.errtest();
    }

    svg.prototype = {
        constructor:svg,
        config:{
            dataformx:[],
            dataformy:[],
            parentdataformx:document.createDocumentFragment(),
            parentdataformy:document.createDocumentFragment(),
            parentdatapoints:document.createDocumentFragment(),
            xwidth:0,    /*间距*/
            ywidth:60,  //行高
            alldata:[], /*实际数据点*/
            datapoints:[],   /*单个数据点*/
            initx:50,
            inity:30,
            linecolor:["#FF6666","#339999","#CCFF99","#CCCC33"],
            circlecolor:["#FF9966","#33CC33","#99CCCC","#CC99CC"],
            target:"", //目标节点
            datar:5, //数据点半径
            linewidth:3, //线条大小
            frmaeline:2, //表格线条大小
            fontcolor:"#99CC33", //坐标字体颜色
            colordata:"#FFCC99" //数据具体演示颜色
        },
        extend:function(config,option){
            for(var i in option){
                config[i] = option[i]
            }
            return config;
        },
        /*表格生成*/
        crateform:function(){
            var xdata = this.config.dataformx, ydata = this.config.dataformy;
            var ywidth = this.config.ywidth;
            var targetwidth = this.config.targetwidth, targetheight = this.config.targetheight;
            var initx = this.config.initx, inity = this.config.inity;
            /*横向表格*/
            for(var i= xdata.length;i>=0;i--){
                var path = document.createElementNS("http://www.w3.org/2000/svg", "path");
                path.setAttribute(‘d‘,"M"+initx+" "+(i*ywidth+inity)+" L"+(ydata.length*ywidth+initx)+" "+(i*ywidth+inity)+" ");
                path.setAttribute("stroke-width",this.config.frmaeline)
                path.setAttribute("stroke","#CCCCCC")
                path.setAttribute("stroke-dasharray","10,10")
                var text = document.createElementNS("http://www.w3.org/2000/svg", "text");
                text.setAttribute("x",0);
                if(i!= xdata.length){
                    text.setAttribute("y",(i+1)*ywidth+inity);
                    text.setAttribute("fill", this.config.fontcolor)
                    text.innerHTML = xdata[xdata.length-1-i];
                }
                this.config.parentdataformy.appendChild(text);
                this.config.parentdataformy.appendChild(path);
            }
            /*纵向表格*/
            var xwidth=  this.config.xwidth=this.config.ywidth;
            for(var i=0 ; i<=ydata.length;i++){
                var path = document.createElementNS("http://www.w3.org/2000/svg", "path");
                path.setAttribute(‘d‘,"M"+(i*xwidth+initx)+" "+inity+" L"+(i*xwidth+initx)+" "+(xdata.length*ywidth+inity)+" ");
                path.setAttribute("stroke-width",this.config.frmaeline)
                path.setAttribute("stroke","#CCCCCC")
                path.setAttribute("stroke-dasharray","10,10")
                var text = document.createElementNS("http://www.w3.org/2000/svg", "text");
                text.setAttribute("x",i*xwidth+initx);
                text.setAttribute("y",(xdata.length*ywidth+inity+20));
                text.setAttribute("fill", this.config.fontcolor)
                if(ydata[i]){
                    text.innerHTML = ydata[i];
                }
                this.config.parentdataformy.appendChild(text);
                this.config.parentdataformy.appendChild(path);
            }
            document.getElementById(this.config.target).appendChild(this.config.parentdataformy);
        },
        /*描点画线生成器*/
        datapoints:function(index){
            var dataformy = this.config.dataformy, dataformx = this.config.dataformx ,datapoints = this.config.datapoints;
            var ywidth = this.config.ywidth, xwidth = this.config.xwidth;
            var initx = this.config.initx, inity = this.config.inity;
            /*行高平局*/
            var yavg = ((dataformx.length-1)*ywidth)/(dataformx[dataformx.length-1]-dataformx[0]);
            var xavg = ((dataformy.length-1)*xwidth)/(dataformy[dataformy.length-1]-dataformy[0]);
            var tempx=initx, tempy=((dataformx.length)*ywidth+inity), tempendx=0,tempendy=0;
            for(var i =0; i<datapoints.length;i++){
                var circle = document.createElementNS("http://www.w3.org/2000/svg", "circle");
                var path = document.createElementNS("http://www.w3.org/2000/svg", "path");
                var context = document.createElement("span")
                tempendx = (datapoints[i][0]-dataformy[0])*xavg+initx;
                tempendy =  (dataformx.length*ywidth+inity)-(datapoints[i][1]-dataformx[0])*yavg;
                circle.setAttribute(‘cx‘,tempendx);
                circle.setAttribute(‘cy‘,tempendy);
                circle.setAttribute("fill",this.config.circlecolor[index]);
                circle.setAttribute("r",this.config.datar);
                circle.setAttribute("class", "circle")
                context.innerHTML =""+datapoints[i][0]+" , "+datapoints[i][1]+"";
                circle.appendChild(context);
                path.setAttribute(‘d‘,"M"+tempx+" "+tempy+" L"+tempendx+" "+tempendy+" ");
                path.setAttribute("stroke-width",this.config.linewidth)
                path.setAttribute("stroke",this.config.linecolor[index])
                path.setAttribute("class", "line")
                tempx=tempendx;
                tempy = tempendy;
                this.config.parentdatapoints.appendChild(path);
                this.config.parentdatapoints.appendChild(circle);
            }
            document.getElementById(this.config.target).appendChild(this.config.parentdatapoints);
        },
        /*数据点分发器*/
        holaddata:function(){
          var alldata = this.config.alldata;
          for(var i =0; i<alldata.length; i++){
              this.config.datapoints = alldata[i];
              this.datapoints.call(this,i)
          }
        },
        holdfn:function(){
            var target = document.getElementById(this.config.target);
            var that = this;
            var divcontext = document.createElement("div");
            target.onmouseover = function(event){
                var event = event?event:window.event;
                var tag = event.target||event.srcElement;
                if(tag.nodeName =="circle"){
                    var x = event.pageX;
                    var y = event.pageY;
                    divcontext.innerHTML = tag.children[0].innerHTML;
                    divcontext.style.cssText ="position:absolute;top:"+y+"px;left:"+x+"px;line-height: 20px;color:"+that.config.colordata+"";
                    divcontext.setAttribute("id", "tip")
                }
                document.body.appendChild(divcontext)
            }
        },
        errtest:function(){
        },
    }

    function _svg(option){
         new svg(option)
    }
    this._svg = _svg
}).call(this)

/*调用方法*/
    /*参数传递*/
//     _svg({
//         /*纵坐标参数*/
//         dataformx:[0,20,40,60,80,100],
//         /*横坐标参数*/
//         dataformy:[1980,1990,2000,2010,2020,2030],
//         /*数据点参数*/
//         alldata:[[[1982,15],[1985,40],[1995,5],[1998,95],[2003,5],[2008,85],[2015,65],[2021,55]],
//                  [[1985,96],[1990,20],[1995,75],[1999,15],[2008,30],[2015,75],[2020,21],[2025,16]],
//                   [[1991,23],[1996,26],[1999,36],[2005,15],[2012,36],[2017,85],[2025,56],[2029,25]],
//                    [[1989,3],[1994,15],[1998,65],[2006,89],[2016,68],[2020,12],[2025,5],[2028,96]]
//         ],
//         /*目标节点ID*/
//         target:"nicai",

//         //以上数据为必设数据
//         //一下数据为选设数据

//         /*表格间距*/
//         ywidth:80,
//         /*设置数据点大小*/
//         datar:5,
//         /*设置线条大小*/
//         linewidth:2,
//         /*设置表格线条大小*/
//         frmaeline:1,
//         /*线条颜色*/
//         linecolor:["#FF6666","#339999","#CCFF99","#CCCC33"],//请务必设置完整对应数据
//         /*数据点颜色*/
//         circlecolor:["#FF9966","#33CC33","#99CCCC","#CC99CC"],//请务必设置完整对应数据
//         /*坐标颜色*/
//         fontcolor:"#FF9900",
//         /*数据具体演示颜色*/
//         colordata:"#CCCC33"
// })

html代码:

<svg width=600 height=550 id="discounted">

</svg>

调用代码

    /*调用方法*/
    /*参数传递*/
    _svg({
        /*纵坐标参数*/
        dataformx:[0,20,40,60,80,100],
        /*横坐标参数*/
        dataformy:[1980,1990,2000,2010,2020,2030],
        /*数据点参数*/
        alldata:[[[1982,15],[1985,40],[1995,5],[1998,95],[2003,5],[2008,85],[2015,65],[2021,55]],
                 [[1985,96],[1990,20],[1995,75],[1999,15],[2008,30],[2015,75],[2020,21],[2025,16]],
                  [[1991,23],[1996,26],[1999,36],[2005,15],[2012,36],[2017,85],[2025,56],[2029,25]],
                   [[1989,3],[1994,15],[1998,65],[2006,89],[2016,68],[2020,12],[2025,5],[2028,96]]
        ],
        /*目标节点ID*/
        target:"discounted",

        //以上数据为必设数据
        //一下数据为选设数据

        /*表格间距*/
        ywidth:80,
        /*设置数据点大小*/
        datar:5,
        /*设置线条大小*/
        linewidth:2,
        /*设置表格线条大小*/
        frmaeline:1,
        /*线条颜色*/
        linecolor:["#FF6666","#339999","#CCFF99","#CCCC33"],//请务必设置完整对应数据
        /*数据点颜色*/
        circlecolor:["#FF9966","#33CC33","#99CCCC","#CC99CC"],//请务必设置完整对应数据
        /*坐标颜色*/
        fontcolor:"#FF9900",
        /*数据具体演示颜色*/
        colordata:"#CCCC33"
})

哈哈哈,终于贴完了。调用的接口我做了,高自由度的控制,用户可以改变图标中的所有样式。大家戳这里看看(如果半天出来,要么是你网速太坑要么是github抽风了)http://fengchuantao.github.io/svg/web/discounted.html; 如果你和我的一样。请移步去github拷代码吧。嘿嘿。

以上全部手写个人原创不加防腐剂。哈哈哈,如果您看到这里了,跪求留个言。哪怕批评一下也好。嘿嘿。

时间: 2024-10-10 14:50:48

html5---svg(折现数据表格)的相关文章

A股最新的自由现金流和折现估值查询

A股最新的自由现金流折现估值,利用自由现金流折现的经典公式,采用 8%.9%.10%.11%.12%.15% 等贴现率来进行估值. SH600000:浦发银行的最新自由现金流和折现估值模型: 浦发银行 SH600004:白云机场的最新自由现金流和折现估值模型: 白云机场 SH600005:武钢股份的最新自由现金流和折现估值模型: 武钢股份 SH600006:东风汽车的最新自由现金流和折现估值模型: 东风汽车 SH600007:中国国贸的最新自由现金流和折现估值模型: 中国国贸 SH600008:

使用echarts实现了一个折现图,数据是一天24小时

arr //你的数据 dataZoom : { show: true, realtime: true, startValue: arr.length - 240, endValue: arr.length } 使用echarts实现了一个折现图,数据是一天24小时,每隔30s从数据库取一次数据,但是这样可读性很低.所以需要在加载图片后,显示最近两个小时的数据,但是dataZoom只能控制起始值,用此方法来显示最近两小时的数据 原文地址:https://www.cnblogs.com/ronle/

d3 基础折现图和饼图

折线图 折现图可以使用svg折线元素polyline来定义一组相连的直线段,但是更推荐使用d3.line()和path元素组合使用,这样更加灵活. d3.line()构造一个新的线生成器,使用默认的.x和.y设置x,y访问器函数. <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> </head> <body&g

数据表格 - DataGrid - 查询

toolbar头部工具栏 <script type="text/javascript"> $(function () { $("#datagrid").datagrid({ url: "<%=homePage%>/testController/datagrid.ajax?type=list", title: "标题", iconCls: "icon-save", pagination

python简单的绘制折现图

在做一些数据统计时,折现图能够看出变化的趋势,最近查内存泄漏,跑了一个晚上的数据,想查查,那么折现图能够给一个很直观的结果. 我们使用pylab包来绘制图形. 我使用pip来管理python包 sudo pip install pylab 时间比较长,其会下载一些依赖的包. #!/usr/bin/python import os import matplotlib.pyplot as plt allFile = [] r = open('result', 'w') heap = [] for f

9款基于HTML5/SVG/Canvas的折线图表应用

1.华丽的HTML5图表 可展示实时数据 HTML5在图表应用中也十分广泛,比起以前的网页图表,HTML5图表制作更便捷,功能更强大.这款HTML5图表插件外观十分华丽和专业,在数据展示方面也很有优势,图表不仅支持多维数据展示,而且支持区域选择数据功能,利用该HTML5图表可以更加方便地管理你的数据. 在线演示 源码下载 2.HTML5折线图表Aristochart 图表配置简单 利用这些HTML5图表可以很方便的展示各种数据,而且非常直观.今天要向大家分享一款HTML5折线图表插件Aristo

vue+echarts实现可拖动节点的折现图(支持拖动方向和上下限的设置)

本篇文档主要是利用echarts实现可拖动节点的折现图,在echarts中找到了一个demo,传送门:https://echarts.baidu.com/examples/editor.html?c=line-draggable,但是不是用vue写的,并且在改写为vue组件的过程中遇到了很多问题,在百度过程中发现并没有相关的文档,所以决定自己开发,并在demo的基础上开发了一些实用的功能,所以把这个过程记录下来.文档中还有很多不够完善的地方,欢迎讨论哈! 需求:制作一个折线图用于显示当前24小时

用Aspose.Words for .NET动态生成word文档中的数据表格

1.概述 最近项目中有一个这样的需求:导出word 文档,要求这个文档的格式不是固定的,用户可以随便的调整,导出内容中的数据表格列是动态的,例如要求导出姓名和性别,你就要导出这两列的数据,而且这个文档不是导出来之后再调整而是导出来后已经是调整过了的.看到这里,您也许马上想到用模板导出!而且.NET中自带有这个组件:Microsoft.Office.Interop.Word,暂且可以满足需求吧.但这个组件也是有局限性的,例如客户端必须装 office组件,而且编码复杂度高.最麻烦的需求是后面那个-

DataGrid( 数据表格) 组件[3]

本节课重点了解 EasyUI 中 DataGrid(数据表格)组件的使用方法,这个组件依赖于Panel(面板).Resizeable(调整大小).LinkButton(按钮).Pageination(分页)组件. 一. 样式设置 //样式设置$('#box').datagrid({url : 'user.php',title : '用户列表',width : 500,iconCls : 'icon-search',striped : true,nowrap : true,fitColumns :