技术标签: python中图形绘制技术的应用
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 单个图形制作
在下面的文章部门我们先逐个绘制多种不同的图形,这些图形的绘制不会涉及到太多的配置项,本文中的重点是如何将不同类型的图形组合在一起。这些图形包含:柱状图
饼图
折线图
热力图
漏斗图
仪表盘
导入库
在进行绘制数据处理和绘图之前,我们还是需要先导入各种库:from pyecharts.globals import CurrentConfig, OnlineHostType # 事先导入,防止不出图
from pyecharts import options as opts # 配置项
from pyecharts.charts import Bar, Pie, Line, HeatMap, Funnel, Gauge, Grid, Page # 各个图形的类
from pyecharts.faker import Faker # 自身数据
from pyecharts.commons.utils import JsCode
from pyecharts.globals import ThemeType,SymbolType
import pandas as pd
import numpy as np
import random
模拟数据
首先我们模拟一份简单的数据:通过下面的方式我们可以掌握如何利用pandas快速生成一个DataFrame数据
柱状图
柱状图的制作使用的是 Bar 方法:bar = (
Bar()
.add_xaxis(df['消费'].tolist())
.add_yaxis("5大开支",df['数据'].tolist())
.set_global_opts(
title_opts=opts.TitleOpts(title="Bar-月度开支"),
legend_opts=opts.LegendOpts(is_show=False),
)
)
bar.render_notebook()
饼图
饼图的制作使用的是Pie:pie = (
Pie()
.add("", [list(z) for z in zip(df['消费'].tolist(), df['数据'].tolist())])
.set_global_opts(title_opts=opts.TitleOpts(title="Pie-月度开支"))
.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))
)
pie.render_notebook()
饼图视频:
折线图
折线图的制作使用的是 Line:line = (
Line()
.add_xaxis(df['消费'].tolist())
.add_yaxis("月度开支", df['数据'].tolist())
.set_global_opts(title_opts=opts.TitleOpts(title="Line-月度开支"))
)
line.render_notebook()
热力图
热力图使用的是HeatMap()方法,在这里我们使用的是pyecharts中自带的数据:print(Faker.week)
print(Faker.clock)# 0-50 的随机数+列表推导式
# 两层的列表推导式
value = [[i, j, random.randint(0, 50)] for i in range(24) for j in range(7)]
heatmap = (
HeatMap()
.add_xaxis(Faker.clock) # 横轴标签
.add_yaxis("热力图", Faker.week, value) # 传入两个列表数据
.set_global_opts(
title_opts=opts.TitleOpts(title="HeatMap-热力图"),
visualmap_opts=opts.VisualMapOpts(),
)
)
heatmap.render_notebook()
热力图视频:
漏斗图
漏斗图在用户画像中运用的非常广,尤其是在电商领域中,从访问、浏览到最终的支付成功等一系列的操作构成一个漏斗,在这里我们模拟一份数据来绘制漏斗图,先生成一个模拟数据:
绘图代码如下:funnel = (
Funnel()
.add("商城漏斗", [list(z) for z in zip(df1['操作'].tolist(), df1['人数'].tolist())])
.set_global_opts(title_opts=opts.TitleOpts(title="商城用户漏斗分析"))
)
funnel.render_notebook()
漏斗图视频:
仪表盘
在这里我们采用官方中的一个实例来制作简单的仪表盘:gauge = (
Gauge()
.add("", [("完成率", 80)])
.set_global_opts(title_opts=opts.TitleOpts(title="Gauge-仪表盘"))
)
gauge.render_notebook()
03 组合绘图
在上面我们通过不同的方法绘制出了各种不同的图形,都是动态可视化的,非常精美的。下面我们通过 Page 类来将上面的多种图形来放到一个可视化看板中。
1、首先给出整体的绘图代码# 1、柱状图
def barPage() -> Bar:
bar = (
Bar()
.add_xaxis(df['消费'].tolist())
.add_yaxis("5大开支",df['数据'].tolist())
.set_global_opts(
title_opts=opts.TitleOpts(title="Bar-月度开支"),
legend_opts=opts.LegendOpts(is_show=False),)
)
return bar
# 2、饼图
def piePage() -> Pie:
pie = (
Pie()
.add("", [list(z) for z in zip(df['消费'].tolist(), df['数据'].tolist())])
.set_global_opts(title_opts=opts.TitleOpts(title="Pie-月度开支"))
.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))
)
return pie
# 3、折线图
def linePage() -> Line:
line = (
Line()
.add_xaxis(df['消费'].tolist())
.add_yaxis("月度开支", df['数据'].tolist())
.set_global_opts(title_opts=opts.TitleOpts(title="Line-月度开支"))
)
return line
# 4、热力图
def heatmapPage() -> HeatMap:
value = [[i, j, random.randint(0, 50)] for i in range(24) for j in range(7)]
heatmap = (
HeatMap()
.add_xaxis(Faker.clock)
.add_yaxis("热力图", Faker.week, value)
.set_global_opts(
title_opts=opts.TitleOpts(title="HeatMap-热力图"),
visualmap_opts=opts.VisualMapOpts(),
)
)
return heatmap
# 5、漏斗图
def funnelPage() -> Funnel:
funnel = (
Funnel()
.add("商品", [list(z) for z in zip(Faker.choose(), Faker.values())])
.set_global_opts(title_opts=opts.TitleOpts(title="Funnel-漏斗图"))
)
return funnel
# 6、仪表盘
def gaugePage() -> Gauge:
gauge = (
Gauge()
.add("", [("完成率", 80)])
.set_global_opts(title_opts=opts.TitleOpts(title="Gauge-仪表盘"))
)
return gauge
# 上面是6个图形的代码,下面利用Page进行组合
# !!! 关键步骤
page = (
Page(layout=Page.DraggablePageLayout)
.add(
barPage(),
piePage(),
linePage(),
funnelPage(),
heatmapPage(),
gaugePage())
)
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的配置文件。
接下来我们利用这个配置来生成上面我们想要达到的效果图形,将图形的格式固定下来,使用下面的代码:Page.save_resize_html("page_demo.html", # 上面的HTML文件名称
cfg_file="chart_config.json", # 保存的json配置文件
dest="new_page_demo.html") # 新HTML文件名称
在jupyter notebook中再运行一次,这样我们就将图形的格式固定下来了。通过这种方式我们可以设置图形的任意大小和位置,部分截图如下:
本文结合各种图形的简单制作,最终使用 Page 将各种图形组合在一起,形成了一个可视化看板的效果,希望对大家掌握 Pyecharts 的使用有所帮助,真正在实际工作中使用到 Pyecharts 这个视化神器。
文章浏览阅读1k次。通过使用ajax方法跨域请求是浏览器所不允许的,浏览器出于安全考虑是禁止的。警告信息如下:不过jQuery对跨域问题也有解决方案,使用jsonp的方式解决,方法如下:$.ajax({ async:false, url: 'http://www.mysite.com/demo.do', // 跨域URL ty..._nginx不停的xhr
文章浏览阅读2k次。关于在 Oracle 中配置 extproc 以访问 ST_Geometry,也就是我们所说的 使用空间SQL 的方法,官方文档链接如下。http://desktop.arcgis.com/zh-cn/arcmap/latest/manage-data/gdbs-in-oracle/configure-oracle-extproc.htm其实简单总结一下,主要就分为以下几个步骤。..._extproc
文章浏览阅读1.5w次。linux下没有上面的两个函数,需要使用函数 mbstowcs和wcstombsmbstowcs将多字节编码转换为宽字节编码wcstombs将宽字节编码转换为多字节编码这两个函数,转换过程中受到系统编码类型的影响,需要通过设置来设定转换前和转换后的编码类型。通过函数setlocale进行系统编码的设置。linux下输入命名locale -a查看系统支持的编码_linux c++ gbk->utf8
文章浏览阅读750次。今天准备从生产库向测试库进行数据导入,结果在imp导入的时候遇到“ IMP-00009:导出文件异常结束” 错误,google一下,发现可能有如下原因导致imp的数据太大,没有写buffer和commit两个数据库字符集不同从低版本exp的dmp文件,向高版本imp导出的dmp文件出错传输dmp文件时,文件损坏解决办法:imp时指定..._imp-00009导出文件异常结束
文章浏览阅读143次。当下是一个大数据的时代,各个行业都离不开数据的支持。因此,网络爬虫就应运而生。网络爬虫当下最为火热的是Python,Python开发爬虫相对简单,而且功能库相当完善,力压众多开发语言。本次教程我们爬取前程无忧的招聘信息来分析Python程序员需要掌握那些编程技术。首先在谷歌浏览器打开前程无忧的首页,按F12打开浏览器的开发者工具。浏览器开发者工具是用于捕捉网站的请求信息,通过分析请求信息可以了解请..._初级python程序员能力要求
文章浏览阅读7.6k次,点赞2次,收藏6次。@Service标注的bean,类名:ABDemoService查看源码后发现,原来是经过一个特殊处理:当类的名字是以两个或以上的大写字母开头的话,bean的名字会与类名保持一致public class AnnotationBeanNameGenerator implements BeanNameGenerator { private static final String C..._@service beanname
文章浏览阅读6.9w次,点赞73次,收藏463次。1.前序创建#include<stdio.h>#include<string.h>#include<stdlib.h>#include<malloc.h>#include<iostream>#include<stack>#include<queue>using namespace std;typed_二叉树的建立
文章浏览阅读7.1k次。在Asp.net上使用Excel导出功能,如果文件名出现中文,便会以乱码视之。 解决方法: fileName = HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8);_asp.net utf8 导出中文字符乱码
文章浏览阅读2.1k次,点赞4次,收藏23次。第一次实验 词法分析实验报告设计思想词法分析的主要任务是根据文法的词汇表以及对应约定的编码进行一定的识别,找出文件中所有的合法的单词,并给出一定的信息作为最后的结果,用于后续语法分析程序的使用;本实验针对 PL/0 语言 的文法、词汇表编写一个词法分析程序,对于每个单词根据词汇表输出: (单词种类, 单词的值) 二元对。词汇表:种别编码单词符号助记符0beginb..._对pl/0作以下修改扩充。增加单词
文章浏览阅读773次。我在使用adb.exe时遇到了麻烦.我想使用与bash相同的adb.exe shell提示符,所以我决定更改默认的bash二进制文件(当然二进制文件是交叉编译的,一切都很完美)更改bash二进制文件遵循以下顺序> adb remount> adb push bash / system / bin /> adb shell> cd / system / bin> chm..._adb shell mv 权限
文章浏览阅读6.8k次,点赞12次,收藏125次。1. 单目相机标定引言相机标定已经研究多年,标定的算法可以分为基于摄影测量的标定和自标定。其中,应用最为广泛的还是张正友标定法。这是一种简单灵活、高鲁棒性、低成本的相机标定算法。仅需要一台相机和一块平面标定板构建相机标定系统,在标定过程中,相机拍摄多个角度下(至少两个角度,推荐10~20个角度)的标定板图像(相机和标定板都可以移动),即可对相机的内外参数进行标定。下面介绍张氏标定法(以下也这么称呼)的原理。原理相机模型和单应矩阵相机标定,就是对相机的内外参数进行计算的过程,从而得到物体到图像的投影_相机-投影仪标定
文章浏览阅读2.2k次。文章目录Wayland 架构Wayland 渲染Wayland的 硬件支持简 述: 翻译一篇关于和 wayland 有关的技术文章, 其英文标题为Wayland Architecture .Wayland 架构若是想要更好的理解 Wayland 架构及其与 X (X11 or X Window System) 结构;一种很好的方法是将事件从输入设备就开始跟踪, 查看期间所有的屏幕上出现的变化。这就是我们现在对 X 的理解。 内核是从一个输入设备中获取一个事件,并通过 evdev 输入_wayland