Python+Flask实现全国、全球疫情大数据可视化(二):网页页面布局+echarts可视化中国地图、世界地图、柱状图和折线图

相关文章

Python+Flask实现全国、全球疫情大数据可视化(一):爬取疫情数据并保存至mysql数据库
Python+Flask实现全国、全球疫情大数据可视化(三):ajax读取mysql中的数据并将参数传递至echarts表格中

一、实现效果

最近简单学习了一下flask,决定来做一个疫情大数据的网页出来。
话不多说先上效果图。还是比较喜欢这样的排版的。
在这里插入图片描述

二、页面布局html+css

页面布局。在此之前需要新建一个flask项目。在项目的static中新建css与js文件目录方便我们存放对应文件。
在这里插入图片描述
在项目的template中存放我们的html文件
这个页面布局主要分为左、中、三个部分。每个部分又分为两部分。先按照这个思路写出html和css.

main.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>疫情追踪</title>
    <script src="../static/js/jquery.min.js"></script>
    <script type="text/javascript" src="../static/js/echarts-all-3.js"></script>
    <script src="../static/js/echarts.min.js"></script>
    <script src="../static/js/china.js"></script>
    <script src="../static/js/world.js"></script>
    <link rel="stylesheet" href="../static/css/main.css" rel="stylesheet">
</head>
<body>
    <div id="title">全国疫情大数据可视化</div>
    <div id="time">我是时间</div>
    <div id="l1">我是左1</div>
    <div id="l2">我是左2</div>
    <div id="c1">
        <div class="num"><h1>123</h1></div>
        <div class="num"><h1>123</h1></div>
        <div class="num"><h1>123</h1></div>
        <div class="num"><h1>123</h1></div>
        <div class="txt"><h2>累计确诊</h2></div>
        <div class="txt"><h2>累计治愈</h2></div>
        <div class="txt"><h2>累计死亡</h2></div>
        <div class="txt"><h2>新增死亡</h2></div>

    </div>
    <div id="c2">我是中2</div>
    <div id="r1">我是右1</div>
    <div id="r2">我是右2</div>
    <script src="../static/js/ec_c2.js"></script>
    <script src="../static/js/controller.js"></script>
    <script src="../static/js/ec_l1.js"></script>
    <script src="../static/js/ec_l2.js"></script>
    <script src="../static/js/ec_r1.js"></script>
    <script src="../static/js/ec_r2.js"></script>
</body>
</html>

页面开头的js是需要提前下载准备好的。末尾的6个js的是我们后续需要实现的内容。
接着编写css

main.css

body{
    margin: 0;
    background: #333;
}
#title{
    position: absolute;
    width: 40%;
    height: 10%;
    top: 0;
    left: 30%;
    background: #333333;
    color: white;
    font-size: 30px;
    /*居中分布*/
    display: flex;
    align-items: center;
    justify-content: center;
}
#time{
    position: absolute;
    color: white;
    width: 30%;
    height: 10%;
    top: 0;
    right: 0;
}

/*数字显示*/
.num{
    width: 25%;
    float: left;
    color: gold;
    font-size: 20px;
    /*居中分布*/
    display: flex;
    align-items: center;
    justify-content: center;
}

.txt{
    width: 25%;
    float: left;
    color: white;
    font-family: "幼圆";
    /*居中分布*/
    display: flex;
    align-items: center;
    justify-content: center;
}
#l1{
    position: absolute;
    width: 30%;
    height: 45%;
    top: 10%;
    left: 0%;
    background: #123456;
}
#l2{
    position: absolute;
    width: 30%;
    height: 45%;
    top: 55%;
    left: 0%;
    background: #234567;
}
#c1{
    position: absolute;
    width: 40%;
    height: 30%;
    top: 10%;
    left: 30%;
    background: #333333;
}
#c2{
    position: absolute;
    width: 40%;
    height: 60%;
    top: 40%;
    left: 30%;
    background: #888888;
}
#r1{
    position: absolute;
    width: 30%;
    height: 45%;
    top: 10%;
    right: 0%;
    background: #666666;
}
#r2{
    position: absolute;
    width: 30%;
    height: 45%;
    top: 55%;
    right: 0%;
    background: #666666;
}

三、echarts图表制作

这些js中的数据基本从echarts官网给出的实例复制下来。后面再往其中传递我们自己的参数

1、全国累计趋势折线图ec_l1.js

var ec_left1=echarts.init(document.getElementById("l1"),"dark")


var ec_left1_option = {
    textStyle:{
        color:'white'
    },
    title: {
        text: '全国累计趋势',
        left: "auto"
    },
    tooltip: {
        trigger: 'axis'
    },
    legend: {
        data: ['累计确诊', '累计治愈', '累计死亡']

    },
    grid: {
        left: '3%',
        right: '4%',
        bottom: '3%',
        containLabel: true
    },
    toolbox: {
        feature: {
            saveAsImage: {}
        }
    },
    xAxis: {
        type: 'category',
        boundaryGap: false,
        data: ['周一', '周二', '周三', '周四', '周五', '周六', '周日']
    },
    yAxis: {
        type: 'value'
    },
    series: [
        {
            name: '累计确诊',
            type: 'line',
            stack: '总量',
            data: [120, 132, 101, 134, 90, 230, 210]
        },
        {
            name: '累计治愈',
            type: 'line',
            stack: '总量',
            data: [220, 182, 191, 234, 290, 330, 310]
        },
        {
            name: '累计死亡',
            type: 'line',
            stack: '总量',
            data: [150, 232, 201, 154, 190, 330, 410]
        },


    ]
};
ec_left1.setOption(ec_left1_option)

2、全国趋势变化折线图ec_l2.js

var ec_left2=echarts.init(document.getElementById("l2"),"dark")

var ec_left2_option = {
  textStyle:{
        color:'white'
    },
    title: {
        text: '全国新增趋势',
        left: "auto"
    },
    tooltip: {
        trigger: 'axis'
    },
    legend: {
        data: ['新增确诊', '新增治愈', '新增死亡']

    },
    grid: {
        left: '3%',
        right: '4%',
        bottom: '3%',
        containLabel: true
    },
    toolbox: {
        feature: {
            saveAsImage: {}
        }
    },
    xAxis: {
        type: 'category',
        boundaryGap: false,
        data: ['周一', '周二', '周三', '周四', '周五', '周六', '周日']
    },
    yAxis: {
        type: 'value'
    },
    series: [
        {
            name: '新增确诊',
            type: 'line',
            stack: '总量',
            data: [120, 132, 101, 134, 90, 230, 210]
        },
        {
            name: '新增治愈',
            type: 'line',
            stack: '总量',
            data: [220, 182, 191, 234, 290, 330, 310]
        },
        {
            name: '新增死亡',
            type: 'line',
            stack: '总量',
            data: [150, 232, 201, 154, 190, 330, 410]
        },


    ]
};
ec_left2.setOption(ec_left2_option)

3、中国疫情地图ec_c2.js

var ec_center=echarts.init(document.getElementById("c2"),"dark")

var dataList=[{'name':'上海','value':318},{'name':'云南','value':100}]




var ec_center_option = {
            tooltip: {
                    formatter:function(params,ticket, callback){
                        return params.seriesName+'<br />'+params.name+':'+params.value
                    }
                },
            visualMap: {
                min: 0,
                max: 1500,
                left: 'left',
                top: 'bottom',
                textStyle:{fontsize:8},
                inRange: {
                    color: ['#e0ffff', '#9D3030']
                },
                show:true,
                splitList:[{start:1,end:9},
                    {start:10,end:99},
                    {start:100,end:999},
                    {start:1000,end:9999},
                    {start:10000}]
            },
            geo: {
                map: 'china',
                roam: false,
                zoom:1.23,
                label: {
                    normal: {
                        show: true,
                        fontSize:'10',
                        color: 'rgba(0,0,0,0.7)'
                    }
                },
                itemStyle: {
                    normal:{
                        borderColor: 'rgba(0, 0, 0, 0.2)'
                    },
                    emphasis:{
                        areaColor: '#F3B329',
                        shadowOffsetX: 0,
                        shadowOffsetY: 0,
                        shadowBlur: 20,
                        borderWidth: 0,
                        shadowColor: 'rgba(0, 0, 0, 0.5)'
                    }
                }
            },
            series : [
                {
                    name: '累计确诊',
                    type: 'map',
                    geoIndex: 0,
                    data:dataList
                }
            ]
        };

ec_center.setOption(ec_center_option)

4、非湖北地区确诊top5柱状图ec_r1.js

var ec_right1=echarts.init(document.getElementById("r1"),"dark")

var ec_right1_option = {
    title: {
        text: '非湖北地区确诊人数top5',
        left: "left"
    },
    xAxis: {
        type: 'category',
        data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
    },
    yAxis: {
        type: 'value'
    },
    series: [{
        data: [120, 200, 150, 80, 70, 110, 130],
        type: 'bar',
        showBackground: true,
        backgroundStyle: {
            color: 'rgba(220, 220, 220, 0.8)'
        }
    }]
};
ec_right1.setOption(ec_right1_option)

5、世界疫情地图ec_l2.js

var ec_right2=echarts.init(document.getElementById("r2"),"dark")


var ec_right2_dataList=[{name: 'Afghanistan', value: 28397.812},
                {name: 'Angola', value: 19549.124},
                {name: 'Albania', value: 3150.143},
                {name: 'United Arab Emirates', value: 8441.537},
            ]
var ec_right2_option = {
    title: {
        text:"全球疫情大数据可视化",
        left: 'center',
        top: 'top'
    },


    visualMap: {
        show:true,
        min: 0,
        max: 1500,
        left:'left',
        top:'bottom',
        textStyle:{fontsize:5},
        inRange: {
                    color: ['#e0ffff', '#9D3030']
                },
        splitList:[{start:10,end:999},
                    {start:1000,end:9999},
                    {start:10000,end:99999},
                    {start:100000,end:999999},
                    {start:1000000}]

    },

    series: [
        {
            name: 'infections',
            type: 'map',
            mapType: 'world',
            roam: true,
            itemStyle:{
                emphasis:{label:{show:true}}
            },
            data:ec_right2_dataList
        }
    ]
};

ec_right2.setOption(ec_right2_option)

这样的话去运行html会有一个基本的模板出来。

接着我们需要做的就是将数据库中的数据传入echarts中使得这个可视化页面能够最终成型!

四、完整项目获取

关注以下公众号,回复"0007"即可get完整项目源码

在这里插入图片描述

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Demonslzh6

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值