一、pyecharts
pyecharts=python+echarts
而Echarts 是一个由百度开源的数据可视化工具,有着良好的交互性,精巧的图表设计能力。当Python与Echarts结合就形成了pyecharts.
有matplotlib和seaborn为什么要用pyecharts?
pyecharts是一种交互式的可视化库,图形展示跟matplotlib相比就好比河流与池塘。pyecharts更加灵活美观,作图更加灵活、巧妙。
官方API文档:https://pyecharts.org/#/zh-cn/intro
二、pyecharts特性
- 简洁的 API 设计,使用如丝滑般流畅,支持链式调用
- 囊括了 30+ 种常见图表,应有尽有 支持主流 Notebook 环境,Jupyter Notebook JupyterLab
- 可轻松集成至 Flask,Django 等主流 Web 框架
- 高度灵活的配置项,可轻松搭配出精美的图表
- 详细的文档和示例,帮助开发者更快的上手项目
- 多达 400+ 地图文件以及原生的百度地图,为地理数据可视化提供强有力的支持
三、pyecharts的安装和导入
安装: pip(3) install pyecharts
使用:
import pyecharts
或
from pyecharts.charts import Bar #调用柱状图
from pyecharts import options as opts #调用设置
from pyecharts.globals import ThemeType #调用内置主题
四、绘图步骤
五、基本绘图
X轴添加数据: add_xaxis(xaxis_data=x)
Y轴添加数据: add_yaxis(series_name='', y_axis=y)
文档:pyecharts - A Python Echarts Plotting Library built with love.
六、 图形类
基本示例:https://gallery.pyecharts.org/#/Line/README
import pyecharts
#查看当前版本
print(pyecharts.__version__)
简单 柱状图
import numpy as np
import pandas as pd
from pyecharts.charts import Bar
#数据x轴,y轴
x=list(range(1,8))
y=[145, 176, 150, 186, 179, 142, 165]
#调用柱状图对象
bar=Bar()
#添加x轴,y轴
bar.add_xaxis(x)
bar.add_yaxis("身高",y)
#显示自动生成html,默认保存在安装路径
# bar.render()
#保存到指定的位置
bar.render('d:/height.html')
# 在notebook中显示图形
bar.render_notebook()
七、 常用图
柱状图 bar
#柱状图
from pyecharts.charts import Bar
from pyecharts import options as opts
from pyecharts.globals import ThemeType #导入主题类型
# V1 版本开始支持链式调用
bar = (
Bar(init_opts=opts.InitOpts(theme=ThemeType.PURPLE_PASSION)) #初始化主题
.add_xaxis(["衬衫", "毛衣", "领带", "裤子", "风衣", "高跟鞋", "袜子"]) #添加x轴
.add_yaxis("商家A", [114, 55, 27, 101, 125, 27, 105]) #添加y轴
.add_yaxis("商家B", [57, 134, 137, 129, 145, 60, 49]) #添加y轴
.set_global_opts(title_opts=opts.TitleOpts(title="某商场销售情况")) #全局设置
)
bar.render_notebook() #显示图形
折线图 line
import pyecharts.options as opts
from pyecharts.charts import Line
from pyecharts.faker import Faker
(
Line()
.add_xaxis(Faker.choose())
.add_yaxis('商家A',Faker.values(),is_smooth=True)
.add_yaxis('商家B',Faker.values(),is_smooth=True)
.set_global_opts(title_opts=opts.TitleOpts(title="折线图-平滑"))
).render_notebook()
散点图 scatter
#散点图 Scatter()
from pyecharts.charts import Scatter
import numpy as np
#数据
x=np.linspace(0,2*np.pi,100) #0--2*pi等分为100份,共100个点
y=np.sin(x)
y2=np.cos(x)
#对象
(
Scatter()
.add_xaxis(x)
.add_yaxis('sin函数',y)
.add_yaxis('cos函数',y2)
).render_notebook()
散点图 特效 scatter
#散点图 Scatter()
from pyecharts import options as opts
from pyecharts.charts import Scatter
from pyecharts.faker import Faker
(
Scatter()
.add_xaxis(Faker.choose())
.add_yaxis('商家A',Faker.values())
.add_yaxis('商家B',Faker.values())
.set_global_opts(
title_opts=opts.TitleOpts(title="散点图大小"),
visualmap_opts=opts.VisualMapOpts(type_="size", max_=150, min_=20),
)
).render_notebook()
饼图 pie
#饼图
from pyecharts.charts import Pie #饼类
from pyecharts.faker import Faker #数据集
from pyecharts import options as opts #选项
#数据对['芒果', 86]
# [list(i) for i in zip(Faker.choose(),Faker.values())]
(
Pie() #对象
.add( " ",
[list(i) for i in zip(Faker.choose(),Faker.values())],#添加数据
radius=["50%", "85%"], #半径
)
.set_global_opts(
title_opts=opts.TitleOpts(title="饼图信息"),#标题
legend_opts=opts.LegendOpts(orient="vertical", pos_top="15%", pos_left="2%"), #图例位置
)
.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}")) #显示标签数据
).render_notebook()
地理图表 geo
# 地理图表
from pyecharts import options as opts
from pyecharts.charts import Geo
from pyecharts.faker import Faker
from pyecharts.globals import ChartType
(
Geo() #对象
.add_schema(maptype='china') #地图类型
.add( '省份', #名称
[list(x) for x in zip(Faker.provinces,Faker.values())], #数据对
type_=ChartType.EFFECT_SCATTER #特效
)
.set_series_opts(label_opts=opts.LabelOpts(is_show=False)) #标签数据隐藏
.set_global_opts(
title_opts=opts.TitleOpts(title="Geo-地理图表"),
visualmap_opts=opts.VisualMapOpts(),
)
).render_notebook()
词云图 wordcloud
# 词云图
# 词云图过滤掉大量的低频低质的文本信息,使得浏览者只要一眼扫过文本就可领略文本的主旨
# 词云图是数据可视化的一种常见形式,特别适合于文本数据的处理和分析
from pyecharts import options as opts
from pyecharts.charts import WordCloud
from pyecharts.globals import SymbolType
words = [
("Macys", 6181),
("Amy Schumer", 4386),
("Jurassic World", 4055),
("Charter Communications", 2467),
("Chick Fil A", 2244),
("Planet Fitness", 1868),
("Pitch Perfect", 1484),
("Express", 1112),
("Home", 865),
("Johnny Depp", 847),
("Lena Dunham", 582),
("Lewis Hamilton", 555),
("KXAN", 550),
("Mary Ellen Mark", 462),
("Farrah Abraham", 366),
("Rita Ora", 360),
("Serena Williams", 282),
("NCAA baseball tournament", 273),
("Point Break", 265),
]
(
WordCloud()
.add("aaa", # 系列名称
words, # 系列数据项,[(word1, count1), (word2, count2)]
word_size_range=[20, 100], #单词字体大小范围
shape=SymbolType.DIAMOND # 词云图轮廓
)
.set_global_opts(title_opts=opts.TitleOpts(title="词云图金刚石"))
).render_notebook()
地图 map
#地图
from pyecharts import options as opts
from pyecharts.charts import Map
from pyecharts.faker import Faker
(
Map()
.add('地图',[list(x) for x in zip(Faker.provinces,Faker.values())],'china')
.set_global_opts(title_opts=opts.TitleOpts(title="Map信息"))
).render_notebook()
层叠图 overlap
# 层叠图
from pyecharts import options as opts
from pyecharts.charts import Line,Scatter
from pyecharts.faker import Faker
#数据
x=Faker.choose()
line = (
Line()
.add_xaxis(x)
.add_yaxis("商家A", Faker.values())
.add_yaxis("商家B", Faker.values())
.set_global_opts(title_opts=opts.TitleOpts(title="层叠图-(折线+散点)"))
)
scatter = (
Scatter()
.add_xaxis(x)
.add_yaxis("商家A", Faker.values())
.add_yaxis("商家B", Faker.values())
)
#层叠
line.overlap(scatter)
#显示
line.render_notebook()
八、高级绘图
(1) 全局配置项:set_globals_opts
(2)一些特效和设置
#图表:图表函数+数据+全局配置+系列配置(可有可无)
#全局配置项:图表实例+set_global_opts(配置项名称=opts,配置项类名())
help(bar.set_global_opts)
柱状图特效1
import numpy as np
import pandas as pd
from pyecharts.charts import Bar
from pyecharts import options as opts #导入配置项
from pyecharts.globals import ThemeType #导入主题类型
#数据x轴,y轴
x=list(range(1,8))
y1=[145, 176, 150, 186, 179, 142, 165]
y2=[60,45,45,68,67,36,78,56]
#调用柱状图对象
#初始化设置
bar=Bar(init_opts=opts.InitOpts(width='700px',height='500px',theme=ThemeType.MACARONS))
#添加x轴,y轴
bar.add_xaxis(x)
bar.add_yaxis("身高",y1)
bar.add_yaxis("体重",y2)
#全局设置
bar.set_global_opts(title_opts=opts.TitleOpts(title="人标题",subtitle='副标题'),toolbox_opts=opts.ToolboxOpts(is_show=True)) #添加标题和工具箱
# 在notebook中显示图形
bar.render_notebook()
柱状图特效2
#数据x轴,y轴
x=list(range(1,8))
y1=[145, 176, 150, 186, 179, 142, 165]
y2=[60,45,45,68,67,36,78,56]
#调用柱状图对象
#初始化设置
bar=Bar(init_opts=opts.InitOpts(width='700px',height='500px',theme=ThemeType.ESSOS))
#添加x轴,y轴
bar.add_xaxis(x)
bar.add_yaxis("体重",y2,stack='stack1')#stack表示堆积柱状图
bar.add_yaxis("身高",y1,stack='stack1')
#全局设置
bar.set_global_opts(title_opts=opts.TitleOpts(title="人标题"))
# 在notebook中显示图形
bar.render_notebook()
柱状图特效3
#数据x轴,y轴
x=list(range(1,8))
y1=[145, 176, 150, 186, 179, 142, 165]
y2=[60,45,45,68,67,36,78,56]
#调用柱状图对象
#初始化设置
bar=Bar(init_opts=opts.InitOpts(width='700px',height='500px',theme=ThemeType.ESSOS))
#添加x轴,y轴
bar.add_xaxis(x)
bar.add_yaxis("体重",y2,stack='stack1')
bar.add_yaxis("身高",y1,stack='stack1')#stack表示堆积柱状图
#全局设置
bar.set_global_opts(title_opts=opts.TitleOpts(title="人标题",pos_left='0%',subtitle='副标题'),#标题
toolbox_opts=opts.ToolboxOpts(is_show=True),#工具箱
visualmap_opts=opts.VisualMapOpts(is_show=True,type_="color"),#视觉映射
legend_opts=opts.LegendOpts(is_show=True),#图例
datazoom_opts=opts.DataZoomOpts(is_show=True,type_="slider")#区域缩放
)
# 在notebook中显示图形
bar.render_notebook()