设为首页收藏本站

EPS数据狗论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1782|回复: 0

[数据可视化] pyecharts 快速入门

[复制链接]

29

主题

236

金钱

388

积分

入门用户

发表于 2019-7-8 13:45:30 | 显示全部楼层 |阅读模式

我们都知道python上的一款可视化工具 matplotlib , 但是它是静态的。后来发现了 pyecharts 模块,简直好用到不行,可视化类型非常多,它是基于 Echarts 开发的。

Echarts 是百度开源的一个数据可视化 JS 库,凭借着良好的交互性,精巧的图表设计,得到了众多开发者的认可。而 Python,很适合用于数据处理。当数据分析遇上数据可视化时,pyecharts 就诞生了。

下面带大家快速了解 pyecharts 以及基本使用方法:

sparkles: 特性
简洁的 API 设计,使用如丝滑般流畅,支持链式调用
囊括了 30+ 种常见图表,应有尽有
支持主流 Notebook 环境,Jupyter Notebook 和 JupyterLab
可轻松集成至 Flask,Django 等主流 Web 框架
高度灵活的配置项,可轻松搭配出精美的图表
详细的文档和示例,帮助开发者更快的上手项目
多达 400+ 地图,为地理数据可视化提供强有力的支持

sparkles: 安装
  1. 1pip install pyecharts
复制代码

注意:pyecharts 共有两个版本,v0.5.X 和 V1.0.X 间完全不兼容,且v0.5.X版本作者已经不维护了,请使用V1.0.X

Bar:柱状图/条形图
柱状图对应的模块是 Bar 除此之外可以设置全局配置和系列配置项。配置项都是基于 options
示例代码:
  1. 1# coding: utf-8
  2. 2from example.commons import Faker
  3. 3from pyecharts import options as opts
  4. 4from pyecharts.charts import Bar
  5. 5
  6. 6def bar_base():
  7. 7
  8. 8    bar = Bar(init_opts=opts.InitOpts(page_title="bar页面"))  # 设置html页面标题
  9. 9    # bar.add_xaxis(["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"])  # 设置x轴的参数
  10. 10
  11. 11    bar.add_xaxis(Faker.choose())
  12. 12    bar.add_yaxis("A", Faker.values())
  13. 13    bar.add_yaxis("B", Faker.values())
  14. 14
  15. 15    # 设置全局配置项,可选
  16. 16    bar.set_global_opts(opts.TitleOpts(title="主标题", subtitle="副标题"))
  17. 17    # render 会生成本地 HTML 文件,默认会在当前目录生成 render.html 文件
  18. 18    bar.render("bar.html")  # 也可以自己指定文件名
  19. 19
  20. 20if __name__ == "__main__":
  21. 21    bar_base()
复制代码


运行代码后会在当前目录生成一个 ”bar.html“ 的文件,我们在浏览器中打开它。效果图如下:
1.png
生成的页面支持-点击取消显示某 Series
2.png
除了上述的使用方法之外,pyecharts 所有方法均支持链式调用!
翻转XY轴
代码如下:
  1. 1 def bar_reversal_axis() -> Bar:
  2. 2
  3. 3    # pyecharts 所有方法均支持链式调用。
  4. 4    c = (
  5. 5        Bar(init_opts=opts.InitOpts(page_title="bar页面"))
  6. 6        .add_xaxis(Faker.choose())
  7. 7        .add_yaxis("商家A", Faker.values())
  8. 8        .add_yaxis("商家B", Faker.values())
  9. 9        .reversal_axis()
  10. 10        .set_global_opts(toolbox_opts=opts.ToolboxOpts())  # 设置工具箱配置项
  11. 11        .set_series_opts(label_opts=opts.LabelOpts(position="right"))  # 系列配置项
  12. 12        .set_global_opts(title_opts=opts.TitleOpts(title="Bar-翻转 XY 轴"))  # 全局配置项
  13. 13    )
  14. 14    return c
  15. 15
  16. 16
  17. 17if __name__ == "__main__":
  18. 18    bar_reversal_axis().render("bar.html")
复制代码


效果图如下:
3.png
部分堆叠数据
同个类目轴上系列配置相同的 stack 值可以堆叠放置
例如堆叠放置A,B的代码如下:
  1. 1 def bar_stack1() -> Bar:
  2. 2    c = (
  3. 3        Bar()
  4. 4        .add_xaxis(Faker.choose())
  5. 5
  6. 6        # 数据堆叠,同个类目轴上系列配置相同的 stack 值可以堆叠放置。
  7. 7        # stack: Optional[str] = None,
  8. 8        .add_yaxis("A", Faker.values(), stack="stack1")
  9. 9        .add_yaxis("B", Faker.values(), stack="stack1")
  10. 10        .add_yaxis("C", Faker.values())
  11. 11        .set_series_opts(label_opts=opts.LabelOpts(is_show=False))
  12. 12        .set_global_opts(title_opts=opts.TitleOpts(title="Bar-堆叠数据(部分)"))
  13. 13    )
  14. 14    return c
复制代码

4.png

区域缩放配置项
  1. 1 def bar_datazoom_slider() -> Bar:
  2. 2    c = (
  3. 3        Bar(init_opts=opts.InitOpts(page_title="bar页面"))
  4. 4        .add_xaxis(Faker.days_attrs)
  5. 5        .add_yaxis("商家A", Faker.days_values)
  6. 6        .set_global_opts(
  7. 7            title_opts=opts.TitleOpts(title="Bar-DataZoom(slider-水平)"),
  8. 8            datazoom_opts=[opts.DataZoomOpts(type_="slider",)]
  9. 9        )
  10. 10    )
  11. 11    return c
复制代码


效果图如下:
区域缩放配置
区域缩放配置项的设置方法在 DataZoomOpts 类中,我们可以点进去查看源码:
5.png
其中,主要用到的参数含义如下:
  1. 1 type_: str = "slider",  # 组件类型,可选 "slider", "inside"
  2. 2 # 拖动时,是否实时更新系列的视图。如果设置为 false,则只在拖拽结束的时候更新。
  3. 3 is_realtime: bool = True,
  4. 4
  5. 5 # 布局方式是横还是竖。可选值为:'horizontal', 'vertical'
  6. 6 orient: str = "horizontal",
复制代码


知道参数的含义后我们可以来试试效果

比如我们要将区域缩放布局改为竖,将 orient 定义为 vertical 即可,代码就不展示,可以自己动手试试!

效果图如下:
6.gif
HeatMap:热力图
热力图主要通过颜色去表现数值的大小,必须要配合 visualMap 组件使用。 直角坐标系上必须要使用两个类目轴。
热力图使用的方法函数是 add_yaxis ,下面是函数的用法说明:
  1. 1 def add_yaxis(
  2. 2    # 系列名称,用于 tooltip 的显示,legend 的图例筛选。
  3. 3    series_name: str,
  4. 4
  5. 5    # Y 坐标轴数据
  6. 6    yaxis_data: Sequence,
  7. 7
  8. 8    # 系列数据项
  9. 9    value: Sequence,
  10. 10
  11. 11    # 是否选中图例
  12. 12    is_selected: bool = True,
  13. 13
  14. 14    # 使用的 x 轴的 index,在单个图表实例中存在多个 x 轴的时候有用。
  15. 15    xaxis_index: Optional[Numeric] = None,
  16. 16
  17. 17    # 使用的 y 轴的 index,在单个图表实例中存在多个 y 轴的时候有用。
  18. 18    yaxis_index: Optional[Numeric] = None,
  19. 19
  20. 20    # 标签配置项,参考 `series_options.LabelOpts`
  21. 21    label_opts: Union[opts.LabelOpts, dict] = opts.LabelOpts(),
  22. 22
  23. 23    # 标记点配置项,参考 `series_options.MarkPointOpts`
  24. 24    markpoint_opts: Union[opts.MarkPointOpts, dict, None] = None,
  25. 25
  26. 26    # 标记线配置项,参考 `series_options.MarkLineOpts`
  27. 27    markline_opts: Union[opts.MarkLineOpts, dict, None] = None,
  28. 28
  29. 29    # 提示框组件配置项,参考 `series_options.TooltipOpts`
  30. 30    tooltip_opts: Union[opts.TooltipOpts, dict, None] = None,
  31. 31
  32. 32    # 图元样式配置项,参考 `series_options.ItemStyleOpts`
  33. 33    itemstyle_opts: Union[opts.ItemStyleOpts, dict, None] = None,
  34. 34
  35. 35
复制代码


其中 series_name, yaxis_data, value 是三个必传参数 示例代码如下:
  1. import random
  2. from example.commons import Faker
  3. from pyecharts import options as opts
  4. from pyecharts.charts import HeatMap


  5. def heatmap_base() -> HeatMap:
  6.     value = [[i, j, random.randint(0, 50)] for i in range(24) for j in range(7)]
  7.     c = (
  8.         HeatMap()
  9.         .add_xaxis(Faker.clock)
  10.         .add_yaxis("series", Faker.week, value)
  11.         .set_global_opts(title_opts=opts.TitleOpts(title="HeatMap-基本示例"),
  12.                          visualmap_opts=opts.VisualMapOpts(), )
  13.     )

  14.     return c


  15. if __name__ == "__main__":
  16.     heatmap_base().render("heatMap.html")
复制代码


效果图如下:
7.gif
WordCloud:词云图
词云图用的的方法函数是 add ,使用方法如下:
  1. 1 def add(
  2. 2    # 系列名称,用于 tooltip 的显示,legend 的图例筛选。
  3. 3    series_name: str,
  4. 4
  5. 5    # 系列数据项,[(word1, count1), (word2, count2)]
  6. 6    data_pair: Sequence,
  7. 7
  8. 8    # 词云图轮廓,有 'circle', 'cardioid', 'diamond', 'triangle-forward', 'triangle', 'pentagon', 'star' 可选
  9. 9    shape: str = "circle",
  10. 10
  11. 11    # 单词间隔
  12. 12    word_gap: Numeric = 20,
  13. 13
  14. 14    # 单词字体大小范围
  15. 15    word_size_range=None,
  16. 16
  17. 17    # 旋转单词角度
  18. 18    rotate_step: Numeric = 45,
  19. 19
  20. 20    # 提示框组件配置项,参考 `series_options.TooltipOpts`
  21. 21    tooltip_opts: Union[opts.TooltipOpts, dict, None] = None,
  22. 22
  23. 23
复制代码

其中 series_name, data_pair, shape 是三个必传参数 示例代码如下:
  1. # coding: utf-8
  2. import random

  3. from pyecharts.charts import WordCloud
  4. from pyecharts import options as opts

  5. words = [
  6.     ("火箭", 10000),
  7.     ("勇士库里", 8888),
  8.     ("在你写这个教程之前,我已经会用了", 6181),
  9.     ("哈登", 6386),
  10.     ("金州拉文", 5055),
  11.     ("杜兰特", 6467),
  12.     ("戳眼", 2244),
  13.     ("NBA", 1868),
  14.     ("季后赛", 1484),
  15.     ("约老师", 1112),
  16.     ("利拉德", 865),
  17.     ("双卡双待", 847),
  18.     ("字母歌MVP", 5582),
  19.     ("卡哇伊", 555),
  20.     ("猛龙", 550),
  21.     ("大帝", 462),
  22.     ("西蒙斯不投三分", 366),
  23.     ("JB", 360),
  24.     ("科尔垃圾", 282),
  25.     ("格林公式", 273),
  26.     ("欧文", 2650),
  27. ]


  28. def wordcloud_base() -> WordCloud:
  29.     c = (
  30.         WordCloud()
  31.         .add("", words, word_size_range=[20, 50], shape="diamond", word_gap=10)
  32.         .set_global_opts(title_opts=opts.TitleOpts(title="WordCloud-shape-diamond"))
  33.     )
  34.     return c


  35. if __name__ == "__main__":
  36.     wordcloud_base().render("wordCloud.html")
复制代码

效果图如下:
8.png

保存为图片
前面我们讲的几种图形生成方法,最后都保存成 html文件,pyecharts 还提供了保存为图片的方式
需要安装 snapshot_selenium ,同时需要将浏览器驱动保存路径 cheromdriver.exe 加入到环境变量中
  1. pip install snapshot_selenium
复制代码

示例代码如下:
  1. 1 # coding: utf-8
  2. 2 import random
  3. 3
  4. 4 from pyecharts.charts import WordCloud
  5. 5 from pyecharts import options as opts
  6. 6 from snapshot_selenium import snapshot as driver
  7. 7 from pyecharts.render import make_snapshot
  8. 8
  9. 9 words = [
  10. 10    ("火箭", 10000),
  11. 11    ("勇士库里", 8888),
  12. 12    ("在你写这个教程之前,我已经会用了", 6181),
  13. 13    ("哈登", 6386),
  14. 14    ("金州拉文", 5055),
  15. 15    ("杜兰特", 6467),
  16. 16    ("戳眼", 2244),
  17. 17    ("NBA", 1868),
  18. 18    ("季后赛", 1484),
  19. 19    ("约老师", 1112),
  20. 20    ("利拉德", 865),
  21. 21    ("双卡双待", 847),
  22. 22    ("字母歌MVP", 5582),
  23. 23    ("卡哇伊", 555),
  24. 24    ("猛龙", 550),
  25. 25    ("大帝", 462),
  26. 26    ("西蒙斯不投三分", 366),
  27. 27    ("JB", 360),
  28. 28    ("科尔垃圾", 282),
  29. 29    ("格林公式", 273),
  30. 30    ("欧文", 2650),
  31. 31]
  32. 32
  33. 33
  34. 34 def wordcloud_base() -> WordCloud:
  35. 35    c = (
  36. 36        WordCloud()
  37. 37        .add("", words, word_size_range=[20, 50], shape="diamond", word_gap=10)
  38. 38        .set_global_opts(title_opts=opts.TitleOpts(title="WordCloud-shape-diamond"))
  39. 39    )
  40. 40    return c
  41. 41
  42. 42
  43. 43 if __name__ == "__main__":
  44. 44    make_snapshot(driver, wordcloud_base().render(), "wordcloud.png")
  45. 45    # wordcloud_base().render("wordCloud.html")
复制代码

最后会在当前目录生成一张 wordcloud.png 的图片

总结
1.根据自己想制作的图形,导入相关的包

2.进行图表的基础设置,创建图表对象

3.需要了解该图表对象下面的函数中参数的含义,及其使用方法

4.配置项主要是在 options中进行配置,有全局配置项和系列配置项,需要了解配置项下面对象含义使用方法

5.利用render()方法来报存图表
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

客服中心
关闭
在线时间:
周一~周五
8:30-17:30
QQ群:
653541906
联系电话:
010-85786021-8017
在线咨询
客服中心

意见反馈|网站地图|手机版|小黑屋|EPS数据狗论坛 ( 京ICP备09019565号-3 )   

Powered by BFIT! X3.4

© 2008-2028 BFIT Inc.

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