ECharts 是一个使用 JavaScript 实现的开源可视化库,涵盖各行业图表,满足各种需求。ECharts 遵循 Apache-2.0 开源协议,免费商用。
ECharts 兼容当前绝大部分浏览器(IE8/9/10/11,Chrome,Firefox,Safari等)及兼容多种设备,可随时随地任性展示。
Echarts官网链接点这里
你可以diy任何你喜欢的配色,配置,坐标轴,等各种方案
本文介绍的是通过Python引用第三方库【pyecharts】,通过代码并且插入数据后,自动生成数据可视化的html文件。
这里是用了一个统计投票数的一个小例子介绍Echarts库。
老规矩,我们直接Win+R打开cmd窗口,在cmd直接输入
pip install 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的文件名。
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}
{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())
# -*- 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}
{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()
有疑问或者不同意见的欢迎提出,可以留言也可以私信。
本人也在一边学习一边成长,有什么做的不好的,烦请多多指教!
谢谢!