python可视化2——基于pyecharts库

Echarts 是百度开源的一个数据可视化JS 库。

pyecharts 是一个用于生成 Echarts 图表的类库,是 Echarts 与 Python 的对接。
·参考网站https://pyecharts.org/#/zh-cn/intro 具体功能还需参考介绍文件。

pyecharts库的安装:pip install pyecharts

·安装pyecharts指定版本:python -m pip install pyecharts==1.6.2

·v1版本只支持python3.6+

例1-1 成绩柱状图

先给一个例子

001
1
2
3
4
5
6
7
8
9
10
11
12
13
14
from pyecharts.charts import Bar
from pyecharts import options as opts
from pyecharts.globals import ThemeType

bar=Bar(init_opts=opts.InitOpts(theme=ThemeType.LIGHT)) #设置柱状图的显示风格

bar.add_xaxis(['语文','数学','英语','计算机','物理','化学'])
bar.add_yaxis('宋丽英',[86,64,85,85,90,55])
bar.add_yaxis('王大伟',[92,99,95,94,92,94])
bar.add_yaxis('张 珍',[98,96,98,98,87,96])

bar.set_global_opts(title_opts=opts.TitleOpts(title='学生成绩表'))
bar.render('testBar.html') # 输出到指定的文件,若为空,则默认为render.html

输出为一个html文件,打开后如下:

002


—-注意到—-

InitOpts:初始化配置项

class InitOpts(

​ # 图表画布宽度,css 长度单位。

​ width: str = “900px”,

​ # 图表画布高度,css 长度单位。

​ height: str = “500px”,

​ # 图表 ID,图表唯一标识,用于在多图表时区分。

​ chart_id: Optional[str] = None,

​ # 渲染风格,可选 “canvas”, “svg”

​ renderer: str = RenderType.CANVAS,

​ # 网页标题

​ page_title: str = “Awesome-pyecharts”,

​ # 图表主题;

​ # pyecharts 提供了 10+ 种内置主题,开发者也可以定制自己喜欢的主题,开发文档的进阶话题-定制主题有相关介绍。

​ # 内置主题包括【LIGHT DART CHALK ESSOS INFOGRAPHIC MACARONS PURPLE_PASSION ROMANTIC SHINE VINTAGE WALDEN WESTEROS WONDERLAND 】

​ theme: str = “white”,

​ # 图表背景颜色

​ bg_color: Optional[str] = None,

​ # 远程 js host,如不设置默认为 https://assets.pyecharts.org/assets/

​ js_host: str = “”,

​ # 画图动画初始化配置,参考 global_options.AnimationOpts

​ animation_opts: Union[AnimationOpts, dict] = AnimationOpts(),
)

例1-2 添加图例和数据标记

题外话:

python – 定义函数 def 后面的 ->,:表示的含义

-> 常常出现在python函数定义的函数名后面,为函数添加元数据,描述函数返回的类型。

: 表示参数的类型建议符
示例:

1
2
3
4
5
def add(x:int, y:int) ->bool:
if(x>y):
return True
else:
retur False

这里,表明了函数的参数传入为int类型,输出的类型为bool类型。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
from pyecharts.charts import Bar
from pyecharts import options as opts

attr=["服装","玩具","电器","首饰"]
v1=[1000,2300,500,5020]
v2=[1200,2500,620,2030]

def bar1() -> Bar: # 链式书写
c=(
Bar()
.add_xaxis(attr) # 设置分类轴
.add_yaxis('商家A',v1) # 设置数值轴
.add_yaxis('商家B',v2)
.set_global_opts(title_opts=opts.TitleOpts(title='商品销售'))
.set_series_opts(
label_opts=opts.LabelOpts(is_show=False),
markpoint_opts=opts.MarkPointOpts(
data=[
opts.MarkPointItem(type_='max',name='最大值'),
opts.MarkPointItem(type_='min',name='最小值'),
opts.MarkPointItem(type_='average',name='平均值'),
]
),
)
)
return c

bar1().render()

输出结果:

003

将鼠标移动到图标上可以显示详细信息:

li1_2.html

输出图片格式的两种方法

chromedrive

一般截图就好了,如果要批量输出或者自动化输出图片格式,需要用pyecharts-snapshot插件。还需要配合Chrome浏览器对应的chromedriver。(爬虫我记得也用到了这个)

  1. 安装 pyecharts-snapshot

pip install pyecharts-snapshot

pip install snapshot-selenium

  1. 安装对应的chrome浏览器对应的Chromedriver(版本必须对应当前浏览器的版本) 下载地址:

    http://chromedriver.storage.googleapis.com/index.html?path=80.0.3987.16/

    http://chromedriver.storage.googleapis.com/index.html

再将其解压到指定路径,将该路径添加到用户的环境变量path路径下,否则报错:

'chromedriver' executable needs to be in PATH.

  1. 导入库

from pyecharts.render import make_snapshot

from snapshot_selenium import snapshot

  1. 设置输出为图片格式

make_snapshot(snapshot, bar1().render(),”filename.png”)

mac添加Chromedriver

1.下载对应版本的驱动器

http://chromedriver.storage.googleapis.com/index.html

2.驱动器放在python的安装目录下

a.找到python的安装路径,一般是/usr/local/bin/python3

终端输入which python,可以查出路径

Mac下/usr/local目录默认是对于Finder是隐藏,如果需要到/usr/local下去,打开Finder,然后使用command+shift+G,在弹出的目录中填写路径就可以了

b.把驱动器放在同目录下

3.配置环境变量

打开终端

输入vi ./.bash_profile回车

输入i进入编辑模式

添加环境变量export PATH=$PATH:/usr/local/bin/chromedriver

点击“esc键,退出insert模式”, 然后输入“:wq!”,回车,保存成功

输入“source ./.bash_profile”,让环境变量生效

输入”echo $PATH”,查看环境变量,发现添加成功

4.赋予权限

sudo chmod u+x,o+x /usr/local/bin/chromedriver

在例1-2结尾添加:

1
2
3
4
from pyecharts.render import make_snapshot
from snapshot_selenium import snapshot

make_snapshot(snapshot, bar1().render(),"li1_2.png")

输出结果:

li1_2

Node.js

还有第二种方法,大致流程(win)如下(我没有试过):

第一步:下载并安装Node.js

下载链接:https://nodejs.org/en/download/

第二步:启动Node.js command prompt,安装phantomjs

c:\user\hhgw>

npm install -g phantomjs-prebuilt

npm install phantomjs-prebuilt –phantomjs_cdnurl=https://bitbucket.org/ariya/phantomjs/downloads

第三步:安装 pyecharts-snapshot

pip install pyecharts-snapshot

pip install snapshot-phantomjs

第四步:设置输出为图片格式

make_snapshot(snapshot, bar1().render(), “testBar1-3.png”)

例2 折线图

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
from pyecharts.charts import Line
from pyecharts import options as opts
attr= ['语文','数学','英语','物理','化学','生物']
v1 = [85,90,96,70,75,90]; v2 = [90,95,98,90,88,89]
def line1()->Line:
c=(
Line( )
.add_xaxis(attr)
.add_yaxis("丁丁",v1)
.add_yaxis("当当",v2)
.set_global_opts(title_opts=opts.TitleOpts(title="折线示意图"))
.set_series_opts(
label_opts=opts.LabelOpts(is_show=True),
markpoint_opts=opts.MarkPointOpts(
data=[
opts.MarkLineItem(type_="average",name="AVE"),
opts.MarkPointItem(type_="max",name="MAX"),
opts.MarkLineItem(type_="min",name="MIN"),]), ))
return c
line1( ).render('折线图.html')

结果如下:

折线图.html

例3-1 饼图