最近领导甩给我两张报表,让我实现报表的联结和可视化展现,要求是通过代码实现,使得每天花费在这项工作上的时间越短越好,要求查询精确,还要漂亮丰富多彩。
数据查询的工作,我会在后期的文章中展现,因为文件涉及到公司内部资料,后期我会选择用其他的数据代替。而“丰富多彩”的图表,我立马就想到了他之前提到的ECHARTS这个强大的可于是就想探索一番。
Echarts中有各式各样的图标示例,并且可以自己切换各种风格和配色,几乎能够满足所有日常的工作需求![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/2a5af0979a569782855ad5c05e0b4086.png)
随便点开一个示例图,左边是代码(可编辑),右边是展示图例。Echarts的代码脚本都是JavaScript,对于我这种小白来说,也可以看得懂,并且其中很多函数的用法和python中都是一致的。![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/c52f86b8798d74241e5b02b4d67c643d.png)
新的探索
一开始我尝试在Echarts网站中直接编辑修改代码生成图例,但是因为每天的报表都要更新统计,而每天重新打开Echarts、再找到图例再输入数字修改,效率很低。
于是我去查阅是否可以将python和Echarts结合起来,或者python中是否有类似于Echarts功能的强大的开源库。最后我终于发现了Pyecharts!(鼓掌鼓掌)
1. 火速安装Pyecharts
和安装任何一个python库一样,首先调出你的python环境
电脑win+R 输入cmd进入:
输入activate python37
我这里是conda的虚拟环境,命名为python37
接着输入 pip install Pyecharts 即可,很快就会装好
2. 快速上手
Pyecharts可以展示动态图,在线报告使用比较美观,并且展示数据方便,鼠标悬停在图上,即可显示数值、标签等。
我需要去呈现的是:
在两个不同的path下核对的总数,和本月每个path下核对的正确率,且鼠标悬停在图中的任何一个位置,都可以显示具体数据信息。
我采用双y轴去展现,最后期望图就是这样:
①导入需要的模块:
Bar 和Line是我们需要画柱状图和折线图需要用到的类,options是pyecharts全局配置项。
什么是全局配置项呢?简而言之,就是我们为我们生成的图例加上标题、图例、颜色和各种其他配置,是作用与整个图例中,而不是单独一类图中。我们可以理解成这是一个类中的全局变量,而不同的图都是需要加入到这个大类中的一个方法。
from pyecharts.charts import Bar,Line
from pyecharts import options as opts
② 分别定义我们的柱状图和折线图函数:
def bar_charts():
bar1 = (
Bar(init_opts=opts.InitOpts(width='1000px',height='500px'))
# 示例对象实例化
.add_xaxis(date) # x轴数据
.add_yaxis("match",A) # 图例名称 + y轴数据
.add_yaxis("total",B)
# 全局配置:标题/副标题
.set_global_opts(title_opts=opts.TitleOpts(title="折柱图日报"),
tooltip_opts=opts.TooltipOpts(trigger='axis',axis_pointer_type='cross'), # 指示器类型,十字/阴影/直线/无
toolbox_opts=opts.ToolboxOpts(
is_show = True, ))
# bar 拓展
.extend_axis(
yaxis=opts.AxisOpts( # 右侧y轴标签
name='',
type_='value', # 类型
min_=0, #右侧y轴的最小值
max_=100, #右侧y轴的最大值
interval=10, # y轴间隔
axislabel_opts=opts.LabelOpts(formatter='{value}%') )
)
)
return bar1
def line_charts():
line1=(
Line()
.add_xaxis(date)
.add_yaxis('percent',y,yaxis_index=1, # 线图用右侧索引,因此为1
label_opts=opts.LabelOpts(is_show=True),is_smooth=True)
)
return line1
③ 将折线图加到柱状图上,用overlap() 函数:
bar1.overlap(line1).render('1212.html')
附上全部代码:
#导入我们需要的模块
from pyecharts.charts import Bar,Line
from pyecharts import options as opts
date=['9.1','9.2','9.6','9.7','9.8','9.10','9.11','9.12','9.17']
A= [1,2,2,1,0,3,0,1,2]
B= [1,2,4,1,3,9,2,1,2]
y=[100,1,50,100,0,33.33,0,1,100]
def bar_charts():
bar1 = (
Bar(init_opts=opts.InitOpts(width='1000px',height='500px')) # 示例对象
.add_xaxis(date) # x轴数据
.add_yaxis("match",A) # 图例名称 + y轴数据
.add_yaxis("total",B)
# 全局配置:标题/副标题
.set_global_opts(title_opts=opts.TitleOpts(title="折柱图日报"),
tooltip_opts=opts.TooltipOpts(trigger='axis',axis_pointer_type='cross'), # 指示器类型,十字/阴影/直线/无
toolbox_opts=opts.ToolboxOpts(
is_show = True, ))
# bar 拓展
.extend_axis(
yaxis=opts.AxisOpts( # 右侧y轴标签
name='',
type_='value', # 类型
min_=0,
max_=100,
interval=10, # 间隔
axislabel_opts=opts.LabelOpts(formatter='{value}%') )
)
)
return bar1
def line_charts():
line1=(
Line()
.add_xaxis(date)
.add_yaxis('percent',y,yaxis_index=1, # 线图用右侧索引,因此为1
label_opts=opts.LabelOpts(is_show=True),is_smooth=True)
)
return line1
bar1=bar_charts()
line1=line_charts()
# line1.render_notebook()
bar1.overlap(line1).render('1212.html')
Pyecharts的功能远不止于此,网上有各种帖子可以参考做出不同的图,我这里就不一一展示了,希望对你有所帮助。
生活啊,就是在一次次想要放弃的时候,又重燃希望啊!