设为首页 收藏本站
查看: 1896|回复: 0

[经验分享] 使用python调用echart画图

[复制链接]

尚未签到

发表于 2018-8-4 12:05:44 | 显示全部楼层 |阅读模式
前言
  之前说了如何使用阿里云的SDK获取云存储的值然后发送表格邮件,但是最近领导又发话了,说这个邮件每天一封看的有点审美疲劳,要顺应“数据可视化”的趋势,于是就要求画图,力求直观。要做到“从众多数据中突出特别数据,从特别数据中突出高价值数据”。我之前用python的matplotlib画过(https://rorschachchan.github.io/2018/02/27/使用matplotlib画图的一个脚本/ ),这一次尝试用echart来做图!
  echart是不太良心的百度良心的开源作品,提供各种各样精美的作图方案,分分钟把图片做的高大上,吸引周围人的目光。不过我对前端的了解非常浅薄,但是没关系。这次使用pyechart插件!这个插件可以让python直接调用echart接口,选择需要的图形之后,直接往里插数据就好,简单粗暴见效快,而且支持3D,可以说是居家旅行常备物品。可以说,有了它,作图能力顶呱呱。感谢开发者大神们的辛苦工作!

作图
  首先先需要安装pyecharts插件,命令是pip install pyecharts:
  然后我们就可以写一个简单的案例,如下:
  

    #!/usr/bin/env python  #coding=utf-8
  from pyecharts import Bar    #导入第三方库
  

  #attr = ["{}day".format(i) for i in range(1, 8)]    #这样的话X坐标就是1day、2day、3day...
  attr = ["Mon", "Feb", "Wed", "Thu", "Fri", "Sat", "Sun"]    #这样X坐标就是星期
  v1 = [1.49, 2.09, 4.03, 2.23, 5.26, 7.71, 7.56]
  v2 = [0.3, 0.9, 0.2, 0.4, 0.7, 0.7, 0.6]
  v3 = [18.15, 13.22, 11.28, 17.99, 18.7, 19.7, 15.6]
  

  bar = Bar("XXX情况总览", "本图表展示过去一周的ABC情况")        #这里是主标题和副标题
  bar.add("A值", attr, v1, mark_line=["average"], mark_point=["max", "min"])    #每一个值的名称以及要展现平均值和最大最小值
  bar.add("B值", attr, v2, mark_line=["average"], mark_point=["max", "min"])
  bar.add("C值", attr, v3, mark_line=["average"], mark_point=["max", "min"])
  bar.render('/tmp/111.html')        #在/tmp文件夹里生成一个111.html文件
  

  如果服务器里有nginx,那么把这个html文件放到nginx/html路径里,再在浏览器里打开就会看到这样的图,我这里就直接把html拽到windows里打开了:
DSC0000.jpg

  而且还可以通过点击网页上“A值”、“B值”、“C值”就可以达到屏蔽相应值的效果,而且如果点击红色箭头的“数据视图”,还可以直接看到对应的数据,非常贴心非常屌,如图:
DSC0001.jpg

  如果你觉得图片有点小,那么可以修改这个地方:bar = Bar("XXX情况总览", "本图表展示过去一周的ABC情况",width=1000,height=900),我这里把宽和高分别从默认值调成了1000和900。
  如果想要在一个html里展现多个图,比如要做三个柱状图,那么example如下:
  

    #!/usr/bin/env python  #coding=utf-8
  from pyecharts import Bar, Grid
  

  attr = ["一班", "二班", "三班", "四班"]
  v1 = [54, 81, 32, 32]
  v2 = [68, 69, 27, 32]
  bar = Bar("赞成票","本图表展示赞成票情况")
  bar.add("年纪长", attr, v1, mark_point=["max", "min"])
  bar.add("副年纪长", attr, v2, mark_point=["max", "min"])
  

  attr2 = ["一班", "二班", "三班", "四班"]
  x1 = [2, 0, 0, 1]
  x2 = [1, 3, 0, 2]
  bar2 = Bar("反对票","本图表展示反对票情况",title_top='bottom',title_color='#1d12eb')            #title_color是标题颜色,这个跟html的颜色取值一样
  bar2.add("年纪长", attr2, x1, mark_point=["max", "min"])
  bar2.add("副年纪长", attr2, x2, mark_point=["max", "min"])
  

  attr3 = ["一班", "二班", "三班", "四班"]
  y1 = [2, 0, 0, 1]
  y2 = [2, 0, 0, 1]
  bar3 = Bar("弃权票","本图表展示弃权票情况",title_pos='right',title_color='#eb1212')             #title_pos是标题的位置,如果不特殊说明,会重叠
  bar3.add("年纪长", attr3, y1, mark_point=["max", "min"])
  bar3.add("副年纪长", attr3, y1, mark_point=["max", "min"])
  

  grid = Grid()
  grid.add(bar, grid_width="40%", grid_height="30%", grid_bottom="60%", grid_right="55%")        #grid_height和grid_width是每一个小图的大小
  grid.add(bar2, grid_width="40%", grid_height="30%", grid_bottom="60%", grid_left="55%")        #grid_bottom和grid_top是垂直位置
  grid.add(bar3, grid_width="40%", grid_height="30%", grid_top="60%", grid_right="55%")        #grid_right和grid_left是水平位置
  grid.render('/tmp/grid.html')    #在/tmp文件夹里生成一个grid.html文件
  

DSC0002.jpg

  上面的数字都是我举例子虚拟的,实际情况中,这些数字都应该是存储在redis这样的数据库里,然后取出来使用。
  上面的两个例子仅仅是pyechart使用的冰山一角,如果想更多的了解,请去看一下文末pyechart的中文说明文档,里面内容特别丰富!

参考资料
  http://echarts.baidu.com
  http://pyecharts.org/#/zh-cn/prepare

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-546454-1-1.html 上篇帖子: python简单的用户管理 下篇帖子: Python中的元组,字典、计算器代码实例及python2与python3的区别
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表