小言_互联网的博客

Pyecharts 组合图形绘制实践

501人阅读  评论(0)

来源:Python数据之道

作者:Peter

整理:Lemon

Pyecharts 组合图形绘制实践

大家好,之前跟大家分享了用 Pyecharts 绘制桑基图和饼图:

有同学提了一个问题,在 Pyecharts 中如何绘制多个图形,今天我们来分享下组合图的绘制。

在实际的工作需求中,我们经常需要绘制多个甚至多种不同类型的图形,有时候还需要将它们放在一个页面中,达到一个可视化看板的效果。

在本文中将利用 pyecharts 来实现这个需求,同时满足动态可视化的效果,再次感受这个可视化神器的强大之处,让你真正爱上它。

01 环境

  • Python 3.7

  • Jupyter notebook

  • Pandas 1.1.3

  • pyecharts 1.7.1

  • pyecharts-jupyter-installer 0.0.3

这里提醒下:

pyecharts 的版本一定要保持一致,非常重要!

pyecharts 的版本一定要保持一致,非常重要!

pyecharts 的版本一定要保持一致,非常重要!

在安装的时候可以直接指定版本号,防止出意外

02 单个图形制作

在下面的文章部门我们先逐个绘制多种不同的图形,这些图形的绘制不会涉及到太多的配置项,本文中的重点是如何将不同类型的图形组合在一起。这些图形包含:

  • 柱状图

  • 饼图

  • 折线图

  • 热力图

  • 漏斗图

  • 仪表盘

导入库

在进行绘制数据处理和绘图之前,我们还是需要先导入各种库:


   
  1. from pyecharts.globals  import CurrentConfig, OnlineHostType   # 事先导入,防止不出图
  2. from pyecharts  import options as opts  # 配置项
  3. from pyecharts.charts  import Bar, Pie, Line, HeatMap, Funnel, Gauge, Grid, Page  # 各个图形的类
  4. from pyecharts.faker  import Faker  # 自身数据
  5. from pyecharts.commons.utils  import JsCode   
  6. from pyecharts.globals  import ThemeType,SymbolType
  7. import pandas as pd
  8. import numpy as np
  9. import random

模拟数据

首先我们模拟一份简单的数据:通过下面的方式我们可以掌握如何利用pandas快速生成一个DataFrame数据

柱状图

柱状图的制作使用的是 Bar 方法:


   
  1. bar = (
  2.     Bar()
  3.     .add_xaxis(df[ '消费'].tolist())
  4.     .add_yaxis( "5大开支",df[ '数据'].tolist())
  5.     .set_global_opts(
  6.         title_opts=opts.TitleOpts(title= "Bar-月度开支"),
  7.         legend_opts=opts.LegendOpts(is_show=False),
  8.     )
  9. )
  10. bar.render_notebook()

饼图

饼图的制作使用的是Pie:


   
  1. pie = (
  2.     Pie()
  3.     .add( "", [list(z)  for z in zip(df[ '消费'].tolist(), df[ '数据'].tolist())])
  4.     .set_global_opts(title_opts=opts.TitleOpts(title= "Pie-月度开支"))
  5.     .set_series_opts(label_opts=opts.LabelOpts(formatter= "{b}: {c}"))
  6. )
  7. pie.render_notebook()

饼图视频:

折线图

折线图的制作使用的是 Line:


   
  1. line = (
  2.     Line()
  3.     .add_xaxis(df[ '消费'].tolist())
  4.     .add_yaxis( "月度开支", df[ '数据'].tolist())
  5.     .set_global_opts(title_opts=opts.TitleOpts(title= "Line-月度开支"))
  6. )
  7. line.render_notebook()

热力图

热力图使用的是HeatMap()方法,在这里我们使用的是pyecharts中自带的数据:


   
  1. print(Faker.week)
  2. print(Faker.clock)

   
  1. 0 -50 的随机数+列表推导式
  2. # 两层的列表推导式
  3. value = [[i, j, random.randint( 050)]  for i in  range( 24for j in  range( 7)]
  4. heatmap = (
  5.     HeatMap()
  6.     .add_xaxis(Faker.clock)   # 横轴标签
  7.     .add_yaxis( "热力图", Faker.week, value)   # 传入两个列表数据
  8.     .set_global_opts(
  9.         title_opts=opts.TitleOpts(title= "HeatMap-热力图"),
  10.         visualmap_opts=opts.VisualMapOpts(),
  11.     )
  12. )
  13. heatmap.render_notebook()

热力图视频:

漏斗图

漏斗图在用户画像中运用的非常广,尤其是在电商领域中,从访问、浏览到最终的支付成功等一系列的操作构成一个漏斗,在这里我们模拟一份数据来绘制漏斗图,先生成一个模拟数据:

绘图代码如下:


   
  1. funnel = (
  2.     Funnel()
  3.     .add( "商城漏斗", [list(z)  for z in zip(df1[ '操作'].tolist(), df1[ '人数'].tolist())])
  4.     .set_global_opts(title_opts=opts.TitleOpts(title= "商城用户漏斗分析"))
  5. )
  6.     
  7. funnel.render_notebook()

漏斗图视频:

仪表盘

在这里我们采用官方中的一个实例来制作简单的仪表盘:


   
  1. gauge = (
  2.     Gauge()
  3.     .add( "", [( "完成率"80)])
  4.     .set_global_opts(title_opts=opts.TitleOpts(title= "Gauge-仪表盘"))
  5. )
  6. gauge.render_notebook()

03 组合绘图

在上面我们通过不同的方法绘制出了各种不同的图形,都是动态可视化的,非常精美的。下面我们通过 Page 类来将上面的多种图形来放到一个可视化看板中。

1、首先给出整体的绘图代码


   
  1. 1、柱状图
  2. def barPage() -> Bar: 
  3.     bar = (
  4.         Bar()
  5.         .add_xaxis(df[ '消费'].tolist())
  6.         .add_yaxis( "5大开支",df[ '数据'].tolist())
  7.         .set_global_opts(
  8.             title_opts=opts.TitleOpts(title= "Bar-月度开支"),
  9.             legend_opts=opts.LegendOpts(is_show=False),)
  10.     )
  11.      return bar
  12. 2、饼图
  13. def piePage() -> Pie:
  14.     pie = (
  15.         Pie()
  16.         .add( "", [list(z)  for z in zip(df[ '消费'].tolist(), df[ '数据'].tolist())])
  17.         .set_global_opts(title_opts=opts.TitleOpts(title= "Pie-月度开支"))
  18.         .set_series_opts(label_opts=opts.LabelOpts(formatter= "{b}: {c}"))
  19.     )
  20.      return pie
  21. 3、折线图
  22. def linePage() -> Line:
  23.     line = (
  24.         Line()
  25.         .add_xaxis(df[ '消费'].tolist())
  26.         .add_yaxis( "月度开支", df[ '数据'].tolist())
  27.         .set_global_opts(title_opts=opts.TitleOpts(title= "Line-月度开支"))
  28.     )
  29.      return line
  30. 4、热力图
  31. def heatmapPage() -> HeatMap:
  32.     value = [[i, j, random.randint( 050)]  for i in  range( 24for j in  range( 7)]
  33.     heatmap = (
  34.         HeatMap()
  35.         .add_xaxis(Faker.clock)
  36.         .add_yaxis( "热力图", Faker.week, value)
  37.         .set_global_opts(
  38.             title_opts=opts.TitleOpts(title= "HeatMap-热力图"),
  39.             visualmap_opts=opts.VisualMapOpts(),
  40.         )
  41.     )
  42.      return heatmap
  43. 5、漏斗图
  44. def funnelPage() -> Funnel:
  45.     funnel = (
  46.         Funnel()
  47.         .add( "商品", [list(z)  for z in zip(Faker.choose(), Faker.values())])
  48.         .set_global_opts(title_opts=opts.TitleOpts(title= "Funnel-漏斗图"))
  49.     )
  50.      return funnel
  51. 6、仪表盘
  52. def gaugePage() -> Gauge:
  53.     gauge = (
  54.         Gauge()
  55.         .add( "", [( "完成率"80)])
  56.         .set_global_opts(title_opts=opts.TitleOpts(title= "Gauge-仪表盘"))
  57.     )
  58.      return gauge
  59. # 上面是 6个图形的代码,下面利用Page进行组合
  60. # !!! 关键步骤
  61. page = (
  62.     Page(layout=Page.DraggablePageLayout)
  63.     .add(
  64.         barPage(),
  65.         piePage(),
  66.         linePage(),
  67.         funnelPage(),
  68.         heatmapPage(),
  69.         gaugePage())
  70. )
  71. page.render( "page_demo.html")

2、现在解释一下上面的代码:

  • 柱状图、饼图等不同的图形我们封装成不同的函数来实现

  • 使用Page类的add方法,添加上面的各个函数

  • 最后使用page.render()来生成一个html文件,就是我们的各个图形下一个html页面中

现在看看生成的组合图形1的效果

组合图形1:

在目前生成的组合图形1中,要注意4点:

  • 左上角有个save config的按钮,接下来这个按钮大有用处

  • 整体的图形是单个上下排列的,且整体靠左,右边很多的空白

  • 每个图形都是虚线框,这表示图形可变大小,同时可以移动的

  • 整体需要上下滑动来浏览全部的图形,视觉效果不佳

下面我们通过save config按钮来进行改动,生成一个我们自己想看到的组合图形2效果:

组合图形2:

当我们把图形按照我们的需求排列OK之后,此时图形仍然没有被固定下来,如果我们刷新当前页面,又会变成组合图形1的效果。

现在点击save config按钮,保存我们的配置文件。此时会在本地当前目录下生成一个chart_config.json的配置文件。

接下来我们利用这个配置来生成上面我们想要达到的效果图形,将图形的格式固定下来,使用下面的代码:


   
  1. Page.save_resize_html( "page_demo.html",   # 上面的HTML文件名称
  2.                       cfg_file= "chart_config.json",  # 保存的json配置文件
  3.                       dest= "new_page_demo.html")  # 新HTML文件名称

jupyter notebook中再运行一次,这样我们就将图形的格式固定下来了。通过这种方式我们可以设置图形的任意大小和位置,部分截图如下:

本文结合各种图形的简单制作,最终使用 Page 将各种图形组合在一起,形成了一个可视化看板的效果,希望对大家掌握 Pyecharts 的使用有所帮助,真正在实际工作中使用到 Pyecharts 这个视化神器。

作者简介

Peter,硕士毕业僧一枚,从电子专业自学Python入门数据行业,擅长数据分析及可视化。喜欢数据,坚持跑步,热爱阅读,乐观生活。个人格言:不浮于世,不负于己

个人站点:www.renpeter.cn,欢迎常来小屋逛逛


本文来自公众号读者投稿,欢迎各位童鞋向公号投稿,点击下面图片了解详情!

---------End---------

 公众号后台回复「微信群」,将邀请加入读者交流群。

????分享、点赞、在看,给个三连击呗!???? 


转载:https://blog.csdn.net/lemonbit/article/details/111602151
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场