zoukankan      html  css  js  c++  java
  • ASP.NET MVC+HighCharts开发统计图表

    HighCharts是开源的Web图表js组件,与D3.js一样,经常用于数据可视化。HighCharts图表类型丰富,功能非常强大,是很好的数据可视化解决方案,其官方网站为:http://www.hcharts.cn/,感兴趣的读者可以自行去下载HighCharts并按照给出的Example尝试着开发,基本上按照示例中的例子,把数据部分替换成自己想要展示的数据就可以了,非常容易上手。本篇博客将结合ASP.NET MVC和HighCharts开发统计图表功能,为简单起见,这里只演示三个最基本、最常用的图表类型(柱状图、饼图)。

    一、横向柱状图

    前端cshtml代码:

    @{
        Layout = null;
    }
    <!DOCTYPE html>
    <html>
    <head>
        <meta name="viewport" content="width=device-width" />
        <title>退休单位统计</title>
        <script src='@Url.Content("~/Scripts/jquery-1.7.1.js")'></script>
        <script src='@Url.Content("~/Scripts/hightcharts/highcharts.js")'></script>
        <script src='@Url.Content("~/Scripts/hightcharts/exporting.js")'></script>
        <script src='@Url.Content("~/Scripts/hightcharts/highcharts-zh_CN.js")'></script>
    </head>
    <body>
        <div id="container" style="min- 400px; height: 400px">
        </div>
        <script type="text/javascript">
    
            $(function () {
                $.ajax({
                    url: '@Url.Action("GetTXDW", "TJTB")',
                    type: 'get',
                    success: function (result) {
                        var name = result.split(';')[0];
                        var data = result.split(';')[1];
                        var nname = eval('(' + name + ')');
                        var ddata = eval('(' + data + ')');
                        $('#container').highcharts({
                            chart: {
                                type: 'bar'
                            },
                            title: {
                                text: '退休人数最多的十个单位'
                            },
                            subtitle: {
                                text: ''
                            },
                            xAxis: {
                                categories: nname,
                                //                            [
                                //                                '自由职业',
                                //                                'xxx有限公司',
                                //                                'xxx工程总公司',
                                //                                'xxx有限公司',
                                //                                'xxx总公司',
                                //                                'xxx有限公司',
                                //                                'xxx有限公司',
                                //                                'xxx有限公司',
                                //                                'xxx厂',
                                //                                'xxx有限责任公司'
                                //                            ],
                                title: {
                                    text: null
                                }
                            },
                            yAxis: {
                                min: 0,
                                title: {
                                    text: '人数',
                                    align: 'high'
                                },
                                labels: {
                                    overflow: 'justify'
                                }
                            },
                            tooltip: {
                                valueSuffix: ''
                            },
                            plotOptions: {
                                bar: {
                                    dataLabels: {
                                        enabled: true,
                                        allowOverlap: true
                                    }
                                }
                            },
                            legend: {
                                layout: 'vertical',
                                align: 'right',
                                verticalAlign: 'top',
                                x: -40,
                                y: 100,
                                floating: true,
                                borderWidth: 1,
                                backgroundColor: ((Highcharts.theme && Highcharts.theme.legendBackgroundColor) || '#FFFFFF'),
                                shadow: true
                            },
                            credits: {
                                enabled: false
                            },
                            series:
                            [{
                                name: '人数',
                                data: ddata
                                //data: [23926, 2328, 1828, 1816, 1485, 1464, 1408, 1164, 1124, 1124]
                            }
                            ]
                        });
                    }
                });
            })
        </script>
    </body>
    </html>

    控制器cs代码:

    /// <summary>
    /// 退休单位统计
    /// </summary>
    /// <returns></returns>
    [HttpGet]
    public string GetTXDW()
    {
        string result1 = string.Empty;
        string result2 = string.Empty;
        string sql = @"with a as(select rownum rn,t.* from(
    select gzdw,count(gzdw) xl from T_RYXX 
    group by gzdw
    order by xl desc) t)
    select gzdw,xl from a where a.rn>=1 and a.rn<=10";
    
        result1 += "[";
        result2 += "[";
        DataSet ds = OracleHelper.Query(sql);
        for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
        {
            result1 += "'" + ds.Tables[0].Rows[i]["GZDW"].ToString() + "'";
            result2 += ds.Tables[0].Rows[i]["XL"].ToString();
            if (i != ds.Tables[0].Rows.Count - 1)
            {
                result1 += ",";
                result2 += ",";
            }
        }
        result1 += "]";
        result2 += "]";
        return result1 + ";" + result2;
    }

    二、饼图

    前端cshtml代码:

    @{
        Layout = null;
    }
    <!DOCTYPE html>
    <html>
    <head>
        <meta name="viewport" content="width=device-width" />
        <title>性别统计</title>
        <script src='@Url.Content("~/Scripts/jquery-1.7.1.js")' type="text/javascript"></script>
        <script src='@Url.Content("~/Scripts/hightcharts/highcharts.js")' type="text/javascript"></script>
        <script src='@Url.Content("~/Scripts/hightcharts/highcharts-3d.js")' type="text/javascript"></script>
        <script src='@Url.Content("~/Scripts/hightcharts/exporting.js")' type="text/javascript"></script>
        <script src='@Url.Content("~/Scripts/hightcharts/highcharts-zh_CN.js")' type="text/javascript"></script>
    </head>
    <body>
        <div id="container" style="min- 400px; height: 400px">
        </div>
        <script type="text/javascript">
            $(function () {
                $.ajax({
                    url: '@Url.Action("GetXBTJ", "TJTB")',
                    type: 'get',
                    success: function (result) {
                        var data = eval('(' + result + ')');
                        $('#container').highcharts({
                            chart: {
                                plotBackgroundColor: null,
                                plotBorderWidth: null,
                                plotShadow: false
                            },
                            title: {
                                text: '退休人员性别比例'
                            },
                            tooltip: {
                                headerFormat: '{series.name}<br>',
                                pointFormat: '{point.name}: <b>{point.percentage:.1f}%</b>'
                            },
                            plotOptions: {
                                pie: {
                                    allowPointSelect: true,
                                    cursor: 'pointer',
                                    dataLabels: {
                                        enabled: true,
                                        format: '<b>{point.name}</b>: {point.percentage:.1f} %',
                                        style: {
                                            color: (Highcharts.theme && Highcharts.theme.contrastTextColor) || 'black'
                                        }
                                    }
                                }
                            },
                            series: [{
                                type: 'pie',
                                name: '退休人员性别比例',
                                data: data
                            }]
                        });
                    }
                });
            });
        </script>
    </body>
    </html>

    控制器cs代码:

    /// <summary>
    /// 性别统计
    /// </summary>
    /// <returns></returns>
    [HttpGet]
    public string GetXBTJ()
    {
        string result = string.Empty;
        string sql = @"with a as(select substr((case when length(sfzhm)=15 then idcard15to18(sfzhm)
    else sfzhm end),17,1) sfzhm
    from T_RYXX 
    where regexp_replace(sfzhm,'^[-+]?d+(.d+)?$','') is null
    order by to_number(dah))
    
    select t.xb,count(t.xb) xl from (
    select (case when mod(to_number(sfzhm),2)=0 then '女' else '男' end) xb from a) t
    group by t.xb";
        DataSet ds = OracleHelper.Query(sql);
        result += "[";
        for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
        {
            result += "[";
            result += "'" + ds.Tables[0].Rows[i]["XB"].ToString() + "'";
            result += ",";
            result += ds.Tables[0].Rows[i]["XL"].ToString();
            result += "]";
            if (i != ds.Tables[0].Rows.Count - 1)
            {
                result += ",";
            }
        }
        result += "]";
        return result;
    }

    三、纵向柱状图

    前端cshtml代码:

    @{
        Layout = null;
    }
    <!DOCTYPE html>
    <html>
    <head>
        <meta name="viewport" content="width=device-width" />
        <title>每日进出库统计</title>
        <script src='@Url.Content("~/Scripts/jquery-1.7.1.js")'></script>
        <script src='@Url.Content("~/Scripts/hightcharts/highcharts.js")'></script>
        <script src='@Url.Content("~/Scripts/hightcharts/highcharts-3d.js")'></script>
        <script src='@Url.Content("~/Scripts/hightcharts/exporting.js")'></script>
        <script src='@Url.Content("~/Scripts/hightcharts/highcharts-zh_CN.js")'></script>
    </head>
    <body>
        <div id="container" style="min- 400px; height: 400px">
        </div>
        <script type="text/javascript">
            $(function () {
                $.ajax({
                    url: '@Url.Action("GETJCK", "TJTB")',
                    type: 'get',
                    success: function (result) {
                        var date = result.split(';')[0];
                        var ink = result.split(';')[1];
                        var outk = result.split(';')[2];
                        var data1 = eval('(' + date + ')');
                        var data2 = eval('(' + ink + ')');
                        var data3 = eval('(' + outk + ')');
    
                        $('#container').highcharts({
                            chart: {
                                type: 'column'
                            },
                            title: {
                                text: '每日档案进出库情况(最近10天)'
                            },
                            subtitle: {
                                text: ''
                            },
                            xAxis: {
                                categories: data1,
                                crosshair: true
                            },
                            yAxis: {
                                min: 0,
                                title: {
                                    text: '档案进出库'
                                }
                            },
                            tooltip: {
                                headerFormat: '<span style="font-size:10px">{point.key}</span><table>',
                                pointFormat: '<tr><td style="color:{series.color};padding:0">{series.name}: </td>' +
                        '<td style="padding:0"><b>{point.y:.0f}</b></td></tr>',
                                footerFormat: '</table>',
                                shared: true,
                                useHTML: true
                            },
                            plotOptions: {
                                column: {
                                    pointPadding: 0.2,
                                    borderWidth: 0
                                }
                            },
                            series: [{
                                name: '进库',
                                data: data3
                            }, {
                                name: '出库',
                                data: data2
                            }]
                        });
                    }
                });
            });
        </script>
    </body>
    </html>

    控制器cs代码:

    /// <summary>
    /// 进出库统计
    /// </summary>
    /// <returns></returns>
    [HttpGet]
    public string GETJCK()
    {
        string result1 = string.Empty;
        string result2 = string.Empty;
        string result3 = string.Empty;
        string sql = @"with a as(select to_char(czsj,'yyyy-mm-dd') jysj,count(*) jyxl 
    from t_dajy 
    where to_char(czsj,'yyyy-mm-dd')>to_char(sysdate-10,'yyyy-mm-dd')
    group by to_char(czsj,'yyyy-mm-dd')),
    
    b as(select to_char(ghsj,'yyyy-mm-dd') ghsj,count(*) ghxl
    from t_dagh 
    where to_char(ghsj,'yyyy-mm-dd')>to_char(sysdate-10,'yyyy-mm-dd')
    group by to_char(ghsj,'yyyy-mm-dd')),
    
    c as(select 
    to_char(to_date(to_char(sysdate,'yyyy-mm-dd'),'yyyy-mm-dd') -rownum+1,'yyyy-mm-dd') as d from dual
    connect by rownum <=to_date(to_char(sysdate,'yyyy-mm-dd'),'yyyy-mm-dd')
    -to_date(to_char(sysdate-10,'yyyy-mm-dd'),'yyyy-mm-dd'))
    
    select c.d,(case when a.jyxl is null then 0 else a.jyxl end) jyxl,
    (case when b.ghxl is null then 0 else b.ghxl end) ghxl from c 
    left join a on a.jysj = c.d
    left join b on b.ghsj = c.d
    order by d desc";
        result1 += "[";
        result2 += "[";
        result3 += "[";
        DataSet ds = OracleHelper.Query(sql);
        for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
        {
            result1 += "'" + ds.Tables[0].Rows[i]["D"].ToString() + "'";
            result2 += ds.Tables[0].Rows[i]["JYXL"].ToString();
            result3 += ds.Tables[0].Rows[i]["GHXL"].ToString();
    
            if (i != ds.Tables[0].Rows.Count - 1)
            {
                result1 += ",";
                result2 += ",";
                result3 += ",";
            }
        }
        result1 += "]";
        result2 += "]";
        result3 += "]";
        return result1 + ";" + result2 + ";" + result3;
    }
  • 相关阅读:
    docker下overlay2占用空间过大,清理docker占用空间
    js为浏览器URL追加参数
    img转Blob对象
    《ECharts》伪立体柱状图
    js分秒格式转时分秒
    表单边框缺一角效果
    File对象转base64
    《VUE》可编辑div限制字数
    quill富文本编辑器自定义字体、文字大小(编辑器内含element上传组件)
    我在华为工作十年的感悟(文摘)
  • 原文地址:https://www.cnblogs.com/guwei4037/p/8251137.html
Copyright © 2011-2022 走看看