Echarts+Python让你的数据可视化(文末有完整源码)

什么是Echarts?

Echarts介绍

ECharts 是一个使用 JavaScript 实现的开源可视化库,涵盖各行业图表,满足各种需求。ECharts 遵循 Apache-2.0 开源协议,免费商用。
ECharts 兼容当前绝大部分浏览器(IE8/9/10/11,Chrome,Firefox,Safari等)及兼容多种设备,可随时随地任性展示。

Echarts官网链接点这里

  • 一个JS的插件
  • 可以运行在PC端和各类移动设备端
  • 兼容目前主流的浏览器
  • 提供多种样式的图表,其中包含动态和静态的图表

在这里插入图片描述

代码演示

大家可以登陆这个链接点击查看更多的代码演示
在这里插入图片描述
在这里插入图片描述

支持自定义主题

你可以diy任何你喜欢的配色,配置,坐标轴,等各种方案

在这里插入图片描述

使用Echarts

本文介绍的是通过Python引用第三方库【pyecharts】,通过代码并且插入数据后,自动生成数据可视化的html文件。

这里是用了一个统计投票数的一个小例子介绍Echarts库。

安装pyecharts库

老规矩,我们直接Win+R打开cmd窗口,在cmd直接输入pip install pyecharts便可直接安装成功!

使用pyecharts制作柱形图

这里给大家演示的是一个最基础的柱形图,并不代表Echarts只能做这么简单的图表,大家可以在官网看到很多高大上的图表以及其源码展示。

点这里点这里点这里!!!官网的演示链接在这里

from pyecharts.charts import Bar
from pyecharts import options as opts

bar = Bar()
bar.add_xaxis(["衬衫", "毛衣", "领带", "裤子", "风衣", "高跟鞋", "袜子"])
bar.add_yaxis("销量", [114, 55, 27, 101, 125, 27, 105])
bar.add_yaxis("价格", [14, 5, 7, 11, 25, 27, 10])
bar.add_yaxis("库存",[27,155,33,42,42,44,99])
#bar.add_yaxis("商家B", [57, 134, 137, 129, 145, 60, 49])
bar.set_global_opts(title_opts=opts.TitleOpts(title="某商场销售情况"))
#bar.render()
bar.render("生成图表.html")

代码运行后,会在同目录下生成一个html的文件,这个文件通过浏览器打开后就是我们的图表了。

在这里插入图片描述

这里有以下几点是要介绍的:
1.【add_xaxis】是更改横坐标所储存的商品名
2.【add_yaxis】是更改纵坐标的数据的,每个物品可以储存多个纵坐标的数据。
3.不论是横坐标的数据还是纵坐标的数据都是以列表的形式所存在的。
4.【title】是我们的图表的表名。
5.【render()函数】是更改我们生成的html的文件名。

Echarts+Python制作一个统计票数的程序

要用到的第三方库

import csv
import pyecharts.options as opts
from pyecharts.charts import Pie
from pyecharts.charts import Bar
import datetime

第三方库介绍:
1.这里我们第一个用到的是CSV,因为我们后期可以将数据存储为CSV的格式。【要是用不上也可以不引用】
2.第三和第四个我们用到的是pyecharts中的Pie和Bar,分别为我们制作条形图和饼状图的时候使用。
3.datetime库我主要拿它来输出当前的时间,如果你不需要依然可以不引用。

主程序模块

#主程序模块
while True:
    print('投票统计系统功能列表                ',datetime.datetime.today())
    print('------------------------------------------------')
    print('------1.添加投票人信息                            -')
    print('------2.删除投票人信息                            -')
    print('------3.删除所有人信息                            -')
    print('------4.显示投票人信息                            -')
    print('------5.生成投票统计饼状图                         -')
    print('------6.生成投票统计条形图                         -')
    print('------7.生成投票统计CSV                          -')
    print('------8.退出程序                                 -')
    print('------------------------------------------------')
    print()
    Main_Choice=input('请输入你的选择:')
    if Main_Choice=='1':
        Count_Set.Count_Add()
    if Main_Choice=='2':
        Count_Set.Count_Del()
    if Main_Choice=='3':
        Count_Set.Count_Clear()
    if Main_Choice=='4':
        Count_Set.Count_Show()
    if Main_Choice=='5':
        Count_Set.Count_HTML_One()
    if Main_Choice=='6':
        Count_Set.Count_HTML_Two()
    if Main_Choice=='7':
        Count_Set.Count_CSV()
    if Main_Choice=='8':
        Count_Set.Count_Exit()

这里是我们的主程序模块,通过用户输入的不同数字进行不同模块的调用。

添加投票信息模块

NameList=[]         #创建储存姓名列表
CountList=[]        #创建储存票数列表
class Count_Set:
    #添加投票信息模块
    def Count_Add(**kwargs):
        while True:
            NameList.append(input("请输入姓名:"))
            CountList.append(input("请输入票数:"))
            print('添加成功!!!')
            print(datetime.datetime.today())
            print()
            Choice=input("请输入您的选择是否继续输入? Y Or N?")
            if Choice=="N":
                break
            if Choice=="Y":
                continue

我们这里是用了两个列表分别储存姓名信息和票数信息,以便于一会我们将数据添加到生成图表的模块。

删除单个投票信息模块

#删除投票信息模块
    def Count_Del(**kwargs):

        print('-------------投票人信息名单-------------')
        for name,count in zip(NameList,CountList):
            print('姓名:',name,':',count)
        print('-------------------------------------')
        print(datetime.datetime.today())
        print()
        print('请输入你需要删除的姓名')
        Del_Name=input('请输入:')
        for index,name in enumerate(NameList):
            if Del_Name == name:
                print('第',index,'号 ',name," 存在,是否继续删除 ?")
                Del_Choice=input('请输入Y or N ?')
                if Del_Choice=='Y':
                    NameList.pop(index)
                    CountList.pop(index)
                    print('删除:',name,'成功!!!')
                    print(datetime.datetime.today())
                    print()
                    Del_Continue_Choice=input('是否需要继续删除?  请输入Y or N ?')
                    if Del_Continue_Choice=='Y':
                        continue
                    else:
                        break
                else:
                    print('----------------输入错误,返回----------------')
                    print(datetime.datetime.today())
                    print()
                    break

这里主要是我们程序中删除单个投票信息的模块。

清空所有投票信息模块

#删除全部投票信息模块
    def Count_Clear(**kwargs):
        print('-------------投票人信息名单-------------')
        for name, count in zip(NameList, CountList):
            print('姓名:', name, ':', count)
        print('-------------------------------------')
        print(datetime.datetime.today())
        print()
        Clear_Choice=input('是否需要清除所有投票信息? 请输入Y Or N ???')
        if Clear_Choice == 'Y':
            NameList.clear()
            CountList.clear()
            print()
            print('所有投票信息清除成功!!!')
            print()
            print('-------------投票人信息名单-------------')
            for name, count in zip(NameList, CountList):
                print('姓名:', name, ':', count)
            print('-------------------------------------')
            print(datetime.datetime.today())
            print()
        else:
            print('-------------输入错误,返回主菜单-------------')

这里是我们删除所有投票信息的模块。

显示所有投票信息的模块

 #显示所有投票信息模块
    def Count_Show(**kwargs):
        print('-------------投票人信息名单-------------')
        for name, count in zip(NameList, CountList):
            print('姓名:', name, ':', count)
        print('-------------------------------------')
        print(datetime.datetime.today())
        print()

这里是我们显示所有的投票信息的模块。
主要是用了zip()函数对两个列表进行同时遍历和输出。

重点来了!!!生成饼状图的模块

#生成投票信息统计饼状图模块
    def Count_HTML_One(**kwargs):
        x_data = NameList
        y_data = CountList
        data_pair = [list(z) for z in zip(x_data, y_data)]
        data_pair.sort(key=lambda x: x[1])

        (
            Pie(init_opts=opts.InitOpts(width="1600px", height="800px", bg_color="#2c343c"))
                .add(
                series_name="",
                data_pair=data_pair,
                rosetype="radius",
                radius="55%",
                center=["50%", "50%"],
                label_opts=opts.LabelOpts(is_show=False, position="center"),
            )
                .set_global_opts(
                title_opts=opts.TitleOpts(
                    title="投票信息统计图表",
                    pos_left="center",
                    pos_top="20",
                    title_textstyle_opts=opts.TextStyleOpts(color="#fff"),
                ),
                legend_opts=opts.LegendOpts(is_show=False),
            )
                .set_series_opts(
                tooltip_opts=opts.TooltipOpts(
                    trigger="item", formatter="{a} <br/>{b}: {c} ({d}%)"
                ),
                label_opts=opts.LabelOpts(color="rgba(255, 255, 255, 0.3)"),
            )
                .render("投票信息统计饼状图.html")
        )
        print('生成投票信息统计饼状图文件成功---》》投票信息统计饼状图.html')
        print(datetime.datetime.today())
        print()

在这里插入图片描述

  • 将NameList和CountList在【data_pair】里面使用zip()函数进行同时遍历
  • 【data_pair.sort】可对数据进行排列
  • 【title】是图表的表名
  • 【render()函数】是生成的html 的文件名

生成条形图的模块

# 生成投票信息统计条形图模块
    def Count_HTML_Two(**kwargs):
        bar = Bar()
        bar.add_xaxis(NameList)
        bar.add_yaxis('票数',CountList)
        bar.set_global_opts(title_opts=opts.TitleOpts(title="投票信息统计"))
        # bar.render()
        bar.render("投票信息统计条形图.html")
        print('生成投票信息统计条形图文件成功---》》投票信息统计条形图.html')
        print(datetime.datetime.today())
        print()

在这里插入图片描述

生成CSV文件的模块

#生成CSV文件模块
    def Count_CSV(**kwargs):
        with open('投票统计名单CSV.csv', 'w')as cf:
            write = csv.writer(cf)
            for list11, list22 in zip(NameList, CountList):
                write.writerow(list11.strip('\n').split(','))
                write.writerow(list22.strip('\n').split(','))
                write.writerow('------------------------数据换行------------------------')
        print()
        print('生成CSV文件成功---》》投票统计名单CSV.csv')
        print('---PS:若CSV文件乱码,需要以GBK编码打开---')
        print(datetime.datetime.today())
        print()

退出程序模块

 #退出程序模块
    def Count_Exit(**kwargs):
        print("投票统计系统即将退出,请选择Y Or N ?")
        Exit_Choice=input('请输入: ')
        if Exit_Choice=='Y':
            print('感谢您的使用,投票统计系统即将退出')
            print(datetime.datetime.today())
            exit(0)
        else:
            print('请输入正确的信息哦~~~')
            print(datetime.datetime.today())

完整源码

# -*- coding:utf-8 -*-
import csv
import pyecharts.options as opts
from pyecharts.charts import Pie
from pyecharts.charts import Bar
import datetime

NameList=[]         #创建储存姓名列表
CountList=[]        #创建储存票数列表
class Count_Set:
    #添加投票信息模块
    def Count_Add(**kwargs):
        while True:
            NameList.append(input("请输入姓名:"))
            CountList.append(input("请输入票数:"))
            print('添加成功!!!')
            print(datetime.datetime.today())
            print()
            Choice=input("请输入您的选择是否继续输入? Y Or N?")
            if Choice=="N":
                break
            if Choice=="Y":
                continue

    #删除投票信息模块
    def Count_Del(**kwargs):

        print('-------------投票人信息名单-------------')
        for name,count in zip(NameList,CountList):
            print('姓名:',name,':',count)
        print('-------------------------------------')
        print(datetime.datetime.today())
        print()
        print('请输入你需要删除的姓名')
        Del_Name=input('请输入:')
        for index,name in enumerate(NameList):
            if Del_Name == name:
                print('第',index,'号 ',name," 存在,是否继续删除 ?")
                Del_Choice=input('请输入Y or N ?')
                if Del_Choice=='Y':
                    NameList.pop(index)
                    CountList.pop(index)
                    print('删除:',name,'成功!!!')
                    print(datetime.datetime.today())
                    print()
                    Del_Continue_Choice=input('是否需要继续删除?  请输入Y or N ?')
                    if Del_Continue_Choice=='Y':
                        continue
                    else:
                        break
                else:
                    print('----------------输入错误,返回----------------')
                    print(datetime.datetime.today())
                    print()
                    break

    #删除全部投票信息模块
    def Count_Clear(**kwargs):
        print('-------------投票人信息名单-------------')
        for name, count in zip(NameList, CountList):
            print('姓名:', name, ':', count)
        print('-------------------------------------')
        print(datetime.datetime.today())
        print()
        Clear_Choice=input('是否需要清除所有投票信息? 请输入Y Or N ???')
        if Clear_Choice == 'Y':
            NameList.clear()
            CountList.clear()
            print()
            print('所有投票信息清除成功!!!')
            print()
            print('-------------投票人信息名单-------------')
            for name, count in zip(NameList, CountList):
                print('姓名:', name, ':', count)
            print('-------------------------------------')
            print(datetime.datetime.today())
            print()
        else:
            print('-------------输入错误,返回主菜单-------------')

    #显示所有投票信息模块
    def Count_Show(**kwargs):
        print('-------------投票人信息名单-------------')
        for name, count in zip(NameList, CountList):
            print('姓名:', name, ':', count)
        print('-------------------------------------')
        print(datetime.datetime.today())
        print()

    #生成投票信息统计饼状图模块
    def Count_HTML_One(**kwargs):
        x_data = NameList
        y_data = CountList
        data_pair = [list(z) for z in zip(x_data, y_data)]
        data_pair.sort(key=lambda x: x[1])

        (
            Pie(init_opts=opts.InitOpts(width="1600px", height="800px", bg_color="#2c343c"))
                .add(
                series_name="",
                data_pair=data_pair,
                rosetype="radius",
                radius="55%",
                center=["50%", "50%"],
                label_opts=opts.LabelOpts(is_show=False, position="center"),
            )
                .set_global_opts(
                title_opts=opts.TitleOpts(
                    title="投票信息统计图表",
                    pos_left="center",
                    pos_top="20",
                    title_textstyle_opts=opts.TextStyleOpts(color="#fff"),
                ),
                legend_opts=opts.LegendOpts(is_show=False),
            )
                .set_series_opts(
                tooltip_opts=opts.TooltipOpts(
                    trigger="item", formatter="{a} <br/>{b}: {c} ({d}%)"
                ),
                label_opts=opts.LabelOpts(color="rgba(255, 255, 255, 0.3)"),
            )
                .render("投票信息统计饼状图.html")
        )
        print('生成投票信息统计饼状图文件成功---》》投票信息统计饼状图.html')
        print(datetime.datetime.today())
        print()

    # 生成投票信息统计条形图模块
    def Count_HTML_Two(**kwargs):
        bar = Bar()
        bar.add_xaxis(NameList)
        bar.add_yaxis('票数',CountList)
        bar.set_global_opts(title_opts=opts.TitleOpts(title="投票信息统计"))
        # bar.render()
        bar.render("投票信息统计条形图.html")
        print('生成投票信息统计条形图文件成功---》》投票信息统计条形图.html')
        print(datetime.datetime.today())
        print()

    #生成CSV文件模块
    def Count_CSV(**kwargs):
        with open('投票统计名单CSV.csv', 'w')as cf:
            write = csv.writer(cf)
            for list11, list22 in zip(NameList, CountList):
                write.writerow(list11.strip('\n').split(','))
                write.writerow(list22.strip('\n').split(','))
                write.writerow('------------------------数据换行------------------------')
        print()
        print('生成CSV文件成功---》》投票统计名单CSV.csv')
        print('---PS:若CSV文件乱码,需要以GBK编码打开---')
        print(datetime.datetime.today())
        print()

    #退出程序模块
    def Count_Exit(**kwargs):
        print("投票统计系统即将退出,请选择Y Or N ?")
        Exit_Choice=input('请输入: ')
        if Exit_Choice=='Y':
            print('感谢您的使用,投票统计系统即将退出')
            print(datetime.datetime.today())
            exit(0)
        else:
            print('请输入正确的信息哦~~~')
            print(datetime.datetime.today())


#主程序模块
while True:
    print('投票统计系统功能列表                ',datetime.datetime.today())
    print('------------------------------------------------')
    print('------1.添加投票人信息                            -')
    print('------2.删除投票人信息                            -')
    print('------3.删除所有人信息                            -')
    print('------4.显示投票人信息                            -')
    print('------5.生成投票统计饼状图                         -')
    print('------6.生成投票统计条形图                         -')
    print('------7.生成投票统计CSV                          -')
    print('------8.退出程序                                 -')
    print('------------------------------------------------')
    print()
    Main_Choice=input('请输入你的选择:')
    if Main_Choice=='1':
        Count_Set.Count_Add()
    if Main_Choice=='2':
        Count_Set.Count_Del()
    if Main_Choice=='3':
        Count_Set.Count_Clear()
    if Main_Choice=='4':
        Count_Set.Count_Show()
    if Main_Choice=='5':
        Count_Set.Count_HTML_One()
    if Main_Choice=='6':
        Count_Set.Count_HTML_Two()
    if Main_Choice=='7':
        Count_Set.Count_CSV()
    if Main_Choice=='8':
        Count_Set.Count_Exit()

Finally

有疑问或者不同意见的欢迎提出,可以留言也可以私信。
本人也在一边学习一边成长,有什么做的不好的,烦请多多指教!
谢谢!

  • 15
    点赞
  • 124
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

一个不会射日的后羿

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

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

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

打赏作者

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

抵扣说明:

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

余额充值