天天看點

基于Echarts實作可視化資料大屏生意參謀大資料可視化系統

前言

🚀 基于 Echarts 實作可視化資料大屏響應式展示效果的源碼,,基于html+css+javascript+echarts制作, 可以在此基礎上重新開發。

本項目中使用的是echarts圖表庫,ECharts 提供了正常的折線圖、柱狀圖、散點圖、餅圖、K線圖,用于統計的盒形圖,用于地理資料可視化的地圖、熱力圖、線圖,用于關系資料可視化的關系圖、treemap、旭日圖,多元資料可視化的平行坐标,還有用于 BI 的漏鬥圖,儀表盤,并且支援圖與圖之間的混搭。

文章目錄

  • ​​前言​​
  • ​​一、Echart是什麼​​
  • ​​二、ECharts入門教程​​
  • ​​三、作品示範​​
  • ​​四、代碼實作​​
  • ​​1.HTML​​
  • ​​2.CSS​​
  • ​​3.JavaScript​​
  • ​​五、更多幹貨​​

一、Echart是什麼

ECharts是一個使用 JavaScript 實作的開源可視化庫,可以流暢的運作在 PC 和移動裝置上,相容目前絕大部分浏覽器(IE8/9/10/11,Chrome,Firefox,Safari等),底層依賴矢量圖形庫 ZRender,提供直覺,互動豐富,可高度個性化定制的資料可視化圖表。

二、ECharts入門教程

​​5 分鐘上手ECharts​​

三、作品示範

四、代碼實作

1.HTML

<!doctype html>
<html>

<head>
    <meta charset="utf-8">
    <title>生意參謀大資料可視化HTML模闆</title>
    <script type="text/javascript" src="js/jquery.js"></script>
    <link rel="stylesheet" href="css/comon0.css">
</head>
<script type="text/javascript">$(document).ready(function () {
        var html = $(".wrap ul").html()
        $(".wrap ul").append(html)
        var ls = $(".wrap li").length / 2 + 1
        i = 0
        ref = setInterval(function () {
            i++
            if (i == ls) {
                i = 1
                $(".wrap ul").css({
                    marginTop: 0
                })
                $(".wrap ul").animate({
                    marginTop: -'.52' * i + 'rem'
                }, 1000)
            }
            $(".wrap ul").animate({
                marginTop: -'.52' * i + 'rem'
            }, 1000)


        }, 2400);



        var html2 = $(".adduser ul").html()
        $(".adduser ul").append(html2)
        var ls2 = $(".adduser li").length / 2 + 1
        a = 0
        ref = setInterval(function () {
            a++
            if (a == ls2) {
                a = 1
                $(".adduser ul").css({
                    marginTop: 0
                })
                $(".adduser ul").animate({
                    marginTop: -'.5' * a + 'rem'
                }, 800)
            }
            $(".adduser ul").animate({
                marginTop: -'.5' * a + 'rem'
            }, 800)


        }, 4300);








    })</script>

<body>
    <div class="loading">
        <div class="loadbox"> <img src="images/loading.gif"> 頁面加載中... </div>
    </div>
    <div class="head">
        <h1><img src="images/logo.png">生意參謀大資料可視化HTML模闆</h1>
        <div class="weather"><img src="images/weather.png"><span>多雲轉小雨</span><span>2017-12-30</span></div>
    </div>
    <div class="mainbox">
        <ul class="clearfix">
            <li>
                <div class="boxall" style="height:">
                    <div class="alltitle">生意參謀</div>

                    <div class="sycm">
                        <ul class="clearfix">
                            <li>
                                <h2>1824</h2><span>今日銷售額</span>
                            </li>
                            <li>
                                <h2>1920</h2><span>昨日銷售額</span>
                            </li>
                            <li>
                                <h2>19%</h2><span>環比增長</span>
                            </li>
                        </ul>
                        <div style="border-bottom: 1px solid rgba(255,255,255,.1)"></div>
                        <ul class="clearfix">
                            <li>
                                <h2>1824</h2><span>今日銷售額</span>
                            </li>
                            <li>
                                <h2>1920</h2><span>昨日銷售額</span>
                            </li>
                            <li>
                                <h2>19%</h2><span>環比增長</span>
                            </li>
                        </ul>


                    </div>
                    <div class="boxfoot"></div>
                </div>
                <div class="boxall" style="height:">
                    <div class="alltitle">消費占比</div>
                    <div class="sy" id="echarts1"></div>
                    <div class="sy" id="echarts2"></div>
                    <div class="sy" id="echarts3"></div>
                    <div class="boxfoot"></div>
                </div>
                <div class="boxall" style="height:">
                    <div class="alltitle">行業區分比例</div>
                    <div id="echarts4" style="height: 2.2rem; width: 100%;"></div>
                    <div class="boxfoot"></div>
                </div>
            </li>
            <li>
                <div class="bar">
                    <div class="barbox">
                        <ul class="clearfix">
                            <li class="pulll_left counter">12581189</li>
                            <li class="pulll_left counter">3912410</li>
                        </ul>
                    </div>
                    <div class="barbox2">
                        <ul class="clearfix">
                            <li class="pulll_left">消費總金額</li>
                            <li class="pulll_left">消費總筆數</li>
                        </ul>
                    </div>
                </div>
                <div class="map">
                    <div class="map1"><img src="images/lbx.png"></div>
                    <div class="map2"><img src="images/jt.png"></div>
                    <div class="map3"><img src="images/map.png"></div>
                    <div class="map4" id="map_1"></div>
                </div>
            </li>
            <li>
                <div class="boxall" style="height:5.2rem">
                    <div class="alltitle">新增會員資訊</div>
                    <div class="tabs">
                        <ul class="clearfix">
                            <li><a class="active" href="#">7天</a></li>
                            <li><a href="#">15天</a></li>
                            <li><a href="#">30天</a></li>
                        </ul>
                    </div>
                    <div class="clearfix">
                        <div class="sy" id="echarts6"></div>
                        <div class="sy" id="echarts7"></div>
                        <div class="sy" id="echarts8"></div>
                    </div>
                    <div class="addnew">
                        <div class="tit02"><span>今日新增會員清單</span></div>
                        <div class="adduser">
                            <ul class="clearfix">
                                <li class="clearfix"> <span class="pulll_left"><img
                                            src="images/head.jpg">1今日新增會員清單</span> <span class="pulll_right">24歲 - 女 -
                                        廣州 </span> </li>
                                <li class="clearfix"> <span class="pulll_left"><img
                                            src="images/head.jpg">2今日新增會員清單</span> <span class="pulll_right">24歲 - 女 -
                                        廣州 </span> </li>
                                <li class="clearfix"> <span class="pulll_left"><img
                                            src="images/head.jpg">3今日新增會員清單</span> <span class="pulll_right">24歲 - 女 -
                                        廣州 </span> </li>
                                <li class="clearfix"> <span class="pulll_left"><img
                                            src="images/head.jpg">4今日新增會員清單</span> <span class="pulll_right">24歲 - 女 -
                                        廣州 </span> </li>
                            </ul>
                        </div>
                    </div>
                    <div class="boxfoot"></div>
                </div>
                <div class="boxall" style="height:">
                    <div class="alltitle">實時消費記錄</div>
                    <div class="wrap">
                        <ul>
                            <li>
                                <p>1李東梁-支付寶支付-120元-XXX門店</p>
                            </li>
                            <li>
                                <p>2李東梁-支付寶支付-120元-XXX門店</p>
                            </li>
                            <li>
                                <p>3李東梁-支付寶支付-120元-XXX門店</p>
                            </li>
                            <li>
                                <p>4李東梁-支付寶支付-120元-XXX門店</p>
                            </li>
                            <li>
                                <p>5李東梁-支付寶支付-120元-XXX門店</p>
                            </li>
                            <li>
                                <p>6李東梁-支付寶支付-120元-XXX門店</p>
                            </li>
                        </ul>
                    </div>
                    <div class="boxfoot"></div>
                </div>
            </li>
        </ul>

    </div>
    <div class="back"></div>
    <script language="JavaScript" src="js/js.js"></script>
    <script type="text/javascript" src="js/echarts.min.js"></script>
    <script type="text/javascript" src="js/china.js"></script>
    <script type="text/javascript" src="js/area_echarts.js"></script>
    <script type="text/javascript">$(document).ready(function () {
            myChart1.resize();
            myChart2.resize();
            myChart3.resize();
            myChart6.resize();
            myChart7.resize();
            myChart8.resize();
        })
        window.addEventListener("resize", function () {
            myChart1.resize();
            myChart2.resize();
            myChart3.resize();
            myChart6.resize();
            myChart7.resize();
            myChart8.resize();
        });</script>
    <script type="text/javascript">var v0 = 1000;
        var v1 = 353;
        var v2 = 178;
        var v3 = 68;



        var myChart6 = echarts.init(document.getElementById('echarts6'));
        option6 = {
            series: [{
                type: 'pie',
                radius: ['70%', '80%'],
                color: '#0088cc',
                label: {
                    normal: {
                        position: 'center'
                    }
                },
                data: [{
                        value: v1,
                        name: '新增會員',
                        label: {
                            normal: {
                                formatter: v1 + '',
                                textStyle: {
                                    fontSize: 20,
                                    color: '#fff',
                                }
                            }
                        }
                    },
                    {
                        value: v0,
                        name: '老會員',
                        label: {
                            normal: {
                                formatter: function (params) {
                                    return '占比' + Math.round(v1 / v0 * 100) + '%'
                                },
                                textStyle: {
                                    color: '#aaa',
                                    fontSize: 12
                                }
                            }
                        },
                        itemStyle: {
                            normal: {
                                color: 'rgba(255,255,255,.2)'
                            },
                            emphasis: {
                                color: '#fff'
                            }
                        },
                    }
                ]
            }]

        };

        var myChart7 = echarts.init(document.getElementById('echarts7'));
        option7 = {
            series: [{
                type: 'pie',
                radius: ['70%', '80%'],
                color: '#fccb00',
                label: {
                    normal: {
                        position: 'center'
                    }
                },
                data: [{
                        value: v2,
                        name: '新增領卡會員',
                        label: {
                            normal: {
                                formatter: v2 + '',
                                textStyle: {
                                    fontSize: 20,
                                    color: '#fff',
                                }
                            }
                        }
                    },
                    {
                        value: v0,
                        name: '總領卡會員',
                        label: {
                            normal: {
                                formatter: function (params) {
                                    return '占比' + Math.round(v2 / v0 * 100) + '%'
                                },
                                textStyle: {
                                    color: '#aaa',
                                    fontSize: 12
                                }
                            }
                        },
                        itemStyle: {
                            normal: {
                                color: 'rgba(255,255,255,.2)'
                            },
                            emphasis: {
                                color: '#fff'
                            }
                        },
                    }
                ]
            }]
        };


        var myChart8 = echarts.init(document.getElementById('echarts8'));
        option8 = {


            series: [{

                type: 'pie',
                radius: ['70%', '80%'],
                color: '#62b62f',
                label: {
                    normal: {
                        position: 'center'
                    }
                },
                data: [{
                    value: v3,
                    name: '女消費',
                    label: {
                        normal: {
                            formatter: v3 + '',
                            textStyle: {
                                fontSize: 20,
                                color: '#fff',
                            }
                        }
                    }
                }, {
                    value: v0,
                    name: '男消費',
                    label: {
                        normal: {
                            formatter: function (params) {
                                return '占比' + Math.round(v2 / v0 * 100) + '%'
                            },
                            textStyle: {
                                color: '#aaa',
                                fontSize: 12
                            }
                        }
                    },
                    itemStyle: {
                        normal: {
                            color: 'rgba(255,255,255,.2)'
                        },
                        emphasis: {
                            color: '#fff'
                        }
                    },
                }]
            }]
        };
        setTimeout(function () {
            myChart6.setOption(option6);
            myChart7.setOption(option7);
            myChart8.setOption(option8);
        }, 500);</script>
    <script type="text/javascript">var myChart1 = echarts.init(document.getElementById('echarts1'));
        var v1 = 298;
        var v2 = 523;
        var v3 = v1 + v2;
        option1 = {


            series: [{
                type: 'pie',
                radius: ['70%', '80%'],
                color: '#0088cc',
                label: {
                    normal: {
                        position: 'center'
                    }
                },
                data: [{
                    value: v1,
                    name: '平均單客價',
                    label: {
                        normal: {
                            formatter: v3 + '',
                            textStyle: {
                                fontSize: 20,
                                color: '#fff',
                            }
                        }
                    }
                }, ]
            }]
        };


        var myChart3 = echarts.init(document.getElementById('echarts3'));
        var v1 = 298
        var v2 = 523
        var v3 = v1 + v2
        option2 = {


            series: [{
                type: 'pie',
                radius: ['70%', '80%'],
                color: '#fccb00',
                label: {
                    normal: {
                        position: 'center'
                    }
                },
                data: [{
                    value: v1,
                    name: '男消費',
                    label: {
                        normal: {
                            formatter: v1 + '',
                            textStyle: {
                                fontSize: 20,
                                color: '#fff',
                            }
                        }
                    }
                }, {
                    value: v2,
                    name: '女消費',
                    label: {
                        normal: {
                            formatter: function (params) {
                                return '占比' + Math.round(v1 / v3 * 100) + '%'
                            },
                            textStyle: {
                                color: '#aaa',
                                fontSize: 12
                            }
                        }
                    },
                    itemStyle: {
                        normal: {
                            color: 'rgba(255,255,255,.2)'
                        },
                        emphasis: {
                            color: '#fff'
                        }
                    },
                }]
            }]
        };


        var myChart2 = echarts.init(document.getElementById('echarts2'));
        option3 = {


            series: [{

                type: 'pie',
                radius: ['70%', '80%'],
                color: '#62b62f',
                label: {
                    normal: {
                        position: 'center'
                    }
                },
                data: [{
                    value: v2,
                    name: '女消費',
                    label: {
                        normal: {
                            formatter: v2 + '',
                            textStyle: {
                                fontSize: 20,
                                color: '#fff',
                            }
                        }
                    }
                }, {
                    value: v1,
                    name: '男消費',
                    label: {
                        normal: {
                            formatter: function (params) {
                                return '占比' + Math.round(v2 / v3 * 100) + '%'
                            },
                            textStyle: {
                                color: '#aaa',
                                fontSize: 12
                            }
                        }
                    },
                    itemStyle: {
                        normal: {
                            color: 'rgba(255,255,255,.2)'
                        },
                        emphasis: {
                            color: '#fff'
                        }
                    },
                }]
            }]
        };
        setTimeout(function () {
            myChart1.setOption(option1);
            myChart2.setOption(option2);
            myChart3.setOption(option3);
        }, 500);</script>
    <script type="text/javascript">var myChart = echarts.init(document.getElementById('echarts4'));
        var plantCap = [{
            name: '工業',
            value: '222'
        }, {
            name: '農業',
            value: '115'
        }, {
            name: '網際網路',
            value: '113'
        }, {
            name: '醫療',
            value: '95'
        }, {
            name: '文學',
            value: '92'
        }, {
            name: '服裝',
            value: '87'
        }];
        var datalist = [{
            offset: [56, 48],
            symbolSize: 110,

            color: 'rgba(73,188,247,.14)',

        }, {

            offset: [30, 70],
            symbolSize: 70,
            color: 'rgba(73,188,247,.14)'
        }, {
            offset: [0, 43],
            symbolSize: 60,
            color: 'rgba(73,188,247,.14)'

        }, {
            offset: [93, 30],
            symbolSize: 70,
            color: 'rgba(73,188,247,.14)'
        }, {
            offset: [26, 19],
            symbolSize: 65,
            color: 'rgba(73,188,247,.14)'
        }, {
            offset: [75, 75],
            symbolSize: 60,
            color: 'rgba(73,188,247,.14)'

        }];

        var datas = [];
        for (var i = 0; i < plantCap.length; i++) {
            var item = plantCap[i];
            var itemToStyle = datalist[i];
            datas.push({
                name: item.value + '\n' + item.name,
                value: itemToStyle.offset,
                symbolSize: itemToStyle.symbolSize,
                label: {
                    normal: {
                        textStyle: {
                            fontSize: 14
                        }
                    }
                },

                itemStyle: {
                    normal: {
                        color: itemToStyle.color,
                        opacity: itemToStyle.opacity
                    }
                },
            })
        }
        option = {
            grid: {
                show: false,
                top: 10,
                bottom: 10
            },

            xAxis: [{
                gridIndex: 0,
                type: 'value',
                show: false,
                min: 0,
                max: 100,
                nameLocation: 'middle',
                nameGap: 5
            }],

            yAxis: [{
                gridIndex: 0,
                min: 0,
                show: false,
                max: 100,
                nameLocation: 'middle',
                nameGap: 30
            }],
            series: [{
                type: 'scatter',
                symbol: 'circle',
                symbolSize: 120,
                label: {
                    normal: {
                        show: true,
                        formatter: '{b}',
                        color: '#FFF',
                        textStyle: {
                            fontSize: '30'
                        }
                    },
                },
                itemStyle: {
                    normal: {
                        color: '#F30'
                    }
                },
                data: datas
            }]

        };
        myChart.setOption(option);
        $(document).ready(function () {
            myChart.resize();

        })
        window.addEventListener("resize", function () {
            myChart.resize();
        });</script>
    <script type="text/javascript" src="js/jquery.waypoints.min.js"></script>
    <script type="text/javascript" src="js/jquery.countup.min.js"></script>
    <script type="text/javascript">$('.counter').countUp();</script>

</body>

</html>      

2.CSS

#echarts1,
#echarts2,
#echarts3,
#echarts6,
#echarts7,
#echarts8 {
  position: relative;
}

#echarts1:before,
#echarts2:before,
#echarts3:before,
#echarts6:before,
#echarts7:before,
#echarts8:before {
  position: absolute;
  content: "23124";
  width: 100%;
  text-align: center;
  bottom: .15rem;
  color: #fff;
  opacity: .7;
  font-size: .18rem;
}

#echarts1:before {
  content: "平均單客價"
}

#echarts2:before {
  content: "男消費"
}

#echarts3:before {
  content: "女消費"
}

#echarts6:before {
  content: "新增會員"
}

#echarts7:before {
  content: "新增領卡會員"
}

#echarts8:before {
  content: "新增消費會員"
}

.tabs {
  text-align: center;
  padding: .1rem 0 0 0;
}

.tabs a {
  position: relative;
  display: inline-block;
  margin-left: 1px;
  padding: .05rem .2rem;
  color: #898989;
  transition: all .3s ease-out 0s;
  font-size: 14px;
}

.tabs li {
  display: inline-block;
}

.tabs a:after {
  position: absolute;
  width: 1px;
  height: 10px;
  background-color: rgba(255, 255, 255, .1);
  content: '';
  margin-left: 0;
  right: -1px;
  margin-top: 7px;
}

.tabs li a.active {
  border: 1px solid rgba(25, 186, 139, .17);
  background: rgba(255, 255, 255, .05);
  color: #fff;
}

.tit02 {
  text-align: center;
  margin: .1rem 0;
  position: relative
}

.tit02 span {
  border: 1px solid rgba(25, 186, 139, .17);
  letter-spacing: 2px;
  padding: .01rem .2rem;
  background: rgba(255, 255, 255, .05);
  font-size: .18rem;
  color: #49bcf7;
}

.tit02:before,
.tit02:after {
  position: absolute;
  width: 26%;
  height: 1px;
  background: rgba(25, 186, 139, .2);
  content: "";
  top: .12rem;
}

.tit02:after {
  right: 0;
}

.tit02:before {
  left: 0;
}

.wrap {
  height: 2.54rem;
  overflow: hidden;
}

.wrap li {
  line-height: .42rem;
  height: .42rem;
  font-size: .18rem;
  text-indent: .24rem;
  margin-bottom: .1rem;
}

.wrap li p {
  border: 1px solid rgba(25, 186, 139, .17);
  color: rgba(255, 255, 255, .6);
}

.sy {
  float: left;
  width: 33%;
  height: 2.2rem;
  margin-top: -.25rem;
}

.adduser {
  height: 1.5rem;
  overflow: hidden;
}

.adduser li {
  height: .5rem;
}

.adduser img {
  width: .40rem;
  border-radius: .5rem;
  margin-right: .1rem;
  display: inline-block;
  vertical-align: middle;
}

.adduser span {
  line-height: .5rem;
  font-size: .18rem;
  color: rgba(255, 255, 255, .6);
}

.sycm ul {
  margin-left: -.5rem;
  margin-right: -.5rem;
  padding: .16rem 0;
}

.sycm li {
  float: left;
  width: 33.33%;
  text-align: center;
  position: relative
}

.sycm li:before {
  position: absolute;
  content: "";
  height: 30%;
  width: 1px;
  background: rgba(255, 255, 255, .1);
  right: 0;
  top: 15%;
}

.sycm li:last-child:before {
  width: 0;
}

.sycm li h2 {
  font-size: .3rem;
  color: #c5ccff;
}

.sycm li span {
  font-size: .18rem;
  color: #fff;
  opacity: .5;
}

@keyframes {
  from {
    transform: rotate(0deg);
  }

  to {
    transform: rotate(359deg);
  }
}

@keyframes {
  from {
    transform: rotate(0deg);
  }

  to {
    transform: rotate(-359deg);
  }
}      

3.JavaScript

$(window).load(function () {
  $(".loading").fadeOut()
 })

 /****/
 $(document).ready(function () {
  var whei = $(window).width()
  $("html").css({
    fontSize: whei / 20
  })
  $(window).resize(function () {
    var whei = $(window).width()
    $("html").css({
      fontSize: whei / 20
    })
  });
 });      

繼續閱讀