DemoPython + Echarts 简易实现一个数据分布图

Posted 海轰Pro

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DemoPython + Echarts 简易实现一个数据分布图相关的知识,希望对你有一定的参考价值。

文章目录

前言

Hello!小伙伴!
非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出~
 
自我介绍 ଘ(੭ˊᵕˋ)੭
昵称:海轰
标签:程序猿|C++选手|学生
简介:因C语言结识编程,随后转入计算机专业,有幸拿过一些国奖、省奖…已保研。
学习经验:扎实基础 + 多做笔记 + 多敲代码 + 多思考 + 学好英语!
 
小白阶段
文章仅作为自己的学习笔记 用于知识体系建立以及复习
知其然 知其所以然!

需求

从一个excel源文件中读取“地址”一列

统计全国各省市各个人数总数量

然后以全国地图和左侧柱状图用以显示

最终实现

源码

1.统计各省市总数量

excle源文件示例

统计

使用Python中的pandas库读取excel文件

依据地址一列按照省份进行划分、统计

计算出各个省份总数量

并生成后续Echarts所需的数据结构

import pandas as pd

fileName = pd.read_csv('../profile/allData.csv',usecols=[3])
df = pd.DataFrame(fileName)

provinces = '北京':1, '天津':0, '上海':0, '重庆':0, '新疆':0, '西藏':0, '宁夏':0, '内蒙古':0,
             '广西':0, '黑龙江':0, '吉林':0, '辽宁':0, '河北':0, '山东':0, '江苏':0, '安徽':0,
             '浙江':0, '福建':0, '广东':0, '海南':0, '云南':0, '贵州':0, '四川':0, '湖南':0,
             '湖北':0, '河南':0, '山西':0, '陕西':0, '甘肃':0, '青海':0, '江西':0, '台湾':0, '香港':0, '澳门':0

for i in range(len(df)):
    name = df['地址'][i]
    if pd.isnull(name):
        continue
    else:
        name = str(name)
        for key in provinces:
            if key in name:
                provinces[key] += 1
                break

# 其他异常数据处理
# print(provinces)
# sum = 0
# for key in provinces:
#     sum += provinces[key]

provinces['其他'] = len(df) - sum

# print(sum)
# print(len(df) - sum)

mydata = []

for key in provinces:
    tempMap = 
    tempMap['name'] = key
    tempMap['value'] = provinces[key]
    mydata.append(tempMap)

print("原始数据")
print(mydata)

provinces = sorted(provinces.items(), key=lambda item:item[1])

print("排序后")
print(provinces)


xArray = []
yData = []

for i in range(len(provinces)):
    xArray.append(provinces[i][0])
    yData.append(provinces[i][1])

print("x、y轴数据")
print(xArray)
print(yData)

2.Echarts的使用

所需文件

test.html

<head>
    <meta charset="utf-8" />
    <title>echarts数据</title>
    <div
        style="text-align: center;font-size: 36px;z-index: 2; font-weight: 500;width: 100%;position: absolute;margin: 0 auto;">
        数量分布图</div>
    <div style="display: flex;flex-direction:row;width: 100%;height: 100%;">
        <div id="main2" style="width: 40%; height: 100%;"></div>
        <div id="main" style="width: 60%; height: 100%;"></div>
    </div>

    <script type="text/javascript" src="echarts.min.js"></script>
    <script type="text/javascript" src="china.js"></script>
    <script>

        function randomData() 
            return Math.round(Math.random() * 1000);
        
        var mydata = ['name': '北京', 'value': 119, 'name': '天津', 'value': 26, 'name': '上海', 'value': 69, 'name': '重庆', 'value': 208, 'name': '新疆', 'value': 12, 'name': '西藏', 'value': 2, 'name': '宁夏', 'value': 4, 'name': '内蒙古', 'value': 16, 'name': '广西', 'value': 54, 'name': '黑龙江', 'value': 39, 'name': '吉林', 'value': 27, 'name': '辽宁', 'value': 49, 'name': '河北', 'value': 85, 'name': '山东', 'value': 120, 'name': '江苏', 'value': 113, 'name': '安徽', 'value': 56, 'name': '浙江', 'value': 107, 'name': '福建', 'value': 72, 'name': '广东', 'value': 163, 'name': '海南', 'value': 23, 'name': '云南', 'value': 48, 'name': '贵州', 'value': 25, 'name': '四川', 'value': 148, 'name': '湖南', 'value': 74, 'name': '湖北', 'value': 52, 'name': '河南', 'value': 105, 'name': '山西', 'value': 31, 'name': '陕西', 'value': 29, 'name': '甘肃', 'value': 15, 'name': '青海', 'value': 2, 'name': '江西', 'value': 37, 'name': '台湾', 'value': 0, 'name': '香港', 'value': 0, 'name': '澳门', 'value': 0,'name':'南海诸岛','value':0]

        optionBar = 
            xAxis: 
                type: 'value',
                axisLine: 
                    show: false
                ,
                splitLine: 
                    show: false
                
            ,
            yAxis: 
                type: 'category',
                data:['台湾', '香港', '澳门', '西藏', '青海', '宁夏', '新疆', '甘肃', '内蒙古', '海南', '贵州', '天津', '吉林', '陕西', '山西', '江西', '黑龙江', '云南', '辽宁', '湖北', '广西', '安徽', '上海', '福建', '湖南', '河北', '河南', '浙江', '江苏', '北京', '山东', '四川', '广东', '重庆'],
                axisLine: 
                    show: false //y轴线消失
                
            ,
            series: [
                
                    data:[0, 0, 0, 2, 2, 4, 12, 15, 16, 23, 25, 26, 27, 29, 31, 37, 39, 48, 49, 52, 54, 56, 69, 72, 74, 85, 105, 107, 113, 119, 120, 148, 163, 208],
                    type: 'bar',
                    itemStyle: 
                        normal: 
                            color: function (params) 
                                let colorList = [
                                    "#c23531",
                                    "#2f4554",
                                    "#61a0a8",
                                    "#d48265",
                                    "#91c7ae",
                                    "#749f83",
                                    "#ca8622",
                                    "#bda29a",
                                    "#6e7074",
                                    "#546570",
                                    "#c4ccd3",
                                    "#4BABDE",
                                    "#FFDE76",
                                    "#E43C59",
                                    "#37A2DA",
                                    "#c23531",
                                    "#2f4554",
                                    "#61a0a8",
                                    "#d48265",
                                    "#91c7ae",
                                    "#749f83",
                                    "#ca8622",
                                    "#bda29a",
                                    "#6e7074",
                                    "#546570",
                                    "#c4ccd3",
                                    "#4BABDE",
                                    "#FFDE76",
                                    "#E43C59",
                                    "#c23531",
                                    "#2f4554",
                                    "#61a0a8",
                                    "#d48265",
                                    "#91c7ae",
                                    "#749f83",
                                    "#ca8622",
                                    "#bda29a",
                                    "#6e7074",
                                    "#546570",
                                    "#c4ccd3",
                                    "#4BABDE",
                                    "#FFDE76",
                                    "#E43C59",
                                    "#c23531",
                                    "#2f4554",
                                    "#61a0a8",
                                    "#d48265",
                                    "#91c7ae",
                                    "#749f83",
                                    "#ca8622",
                                    "#bda29a",
                                    "#6e7074",
                                    "#546570",
                                    "#c4ccd3",
                                    "#4BABDE",
                                    "#FFDE76",
                                    "#E43C59",
                                ];
                                return colorList[params.dataIndex];
                            ,
                            label: 
                                show: true, //开启显示
                                position: 'right', //在上方显示
                                textStyle: 
                                    //数值样式
                                    color: 'black',
                                    fontSize: 16
                                
                            
                        
                    
                
            ]
        ;
        var optionMap = 
            backgroundColor: '#FFFFFF',
            title: 
                text: '',
                subtext: '',
                x: 'center'
            ,
            tooltip: 
                trigger: 'item',
                formatter: `b :  c`
            ,

            //左侧小导航图标
            // visualMap: 
            //     show: true,
            //     x: 'left',
            //     y: 'center',
            //     splitList: [
            //          start: 500, end: 600 ,  start: 400, end: 500 ,
            //          start: 300, end: 400 ,  start: 200, end: 300 ,
            //          start: 100, end: 200 ,  start: 0, end: 100 ,
            //     ],
            //     color: ['#5475f5', '#9feaa5', '#85daef', '#74e2ca', '#e6ac53', '#9fb5ea']
            // ,

            visualMap: 
                min: 0,
                max: 300,
                right: '0%',
                text: ['High', 'Low'],
                realtime: false,
                calculable: true,
                inRange: 
                    color: ['lightskyblue', 'yellow', 'orangered']
                
            ,
            //配置属性
            series: [
                name: '数据',
                type: 'map',
                mapType: 'china',
                roam: false,
                label: 
                    normal: 
                        formatter: 'b:c',
                        show: true  //省份名称  
                    ,
                    emphasis: 
                        show: true
                    
                ,
                data: mydata  //数据
            ]
        ;
        //初始化echarts实例
        var myChart = echarts.init(document.getElementById('main'));
        var myChart2 = echarts.init(document.getElementById('main2'));

        //使用制定的配置项和数据显示图表
        myChart.以上是关于DemoPython + Echarts 简易实现一个数据分布图的主要内容,如果未能解决你的问题,请参考以下文章

ECharts 地图绘制与钻取简易接口

Django+Echarts实现数据可视化

使用ECharts制作可视化图表

Hadoop-02 基于Hadoop的JavaEE数据可视化简易案例

使用c语言调用python小结

Echarts 柱状图横向排版颜色渐变---实现效果详解(vue+Echarts实现)