分享

python数据可视化神器

 flyk0tcfb46p9f 2019-05-19

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

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

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

? 特性

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

? 安装

1pip install pyecharts

Python学习交流群:1004391443,这里有资源共享,技术解答,还有小编从最基础的Python资料到项目实战的学习资料都有整理,希望能帮助你更了解python,学习python。

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

示例数据

pyecharts 给我们提供了示例数据,后面的图表示例的数据均来自 Faker 类,Faker 类的定义如下:

 1class Faker: 2 clothes = ['衬衫', '毛衣', '领带', '裤子', '风衣', '高跟鞋', '袜子'] 3 drinks = ['可乐', '雪碧', '橙汁', '绿茶', '奶茶', '百威', '青岛'] 4 phones = ['小米', '三星', '华为', '苹果', '魅族', 'VIVO', 'OPPO'] 5 fruits = ['草莓', '芒果', '葡萄', '雪梨', '西瓜', '柠檬', '车厘子'] 6 animal = ['河马', '蟒蛇', '老虎', '大象', '兔子', '熊猫', '狮子'] 7 cars = ['宝马', '法拉利', '奔驰', '奥迪', '大众', '丰田', '特斯拉'] 8 dogs = ['哈士奇', '萨摩耶', '泰迪', '金毛', '牧羊犬', '吉娃娃', '柯基'] 9 week = ['周一', '周二', '周三', '周四', '周五', '周六', '周日']10 week_en = 'Saturday Friday Thursday Wednesday Tuesday Monday Sunday'.split()11 clock = (12 '12a 1a 2a 3a 4a 5a 6a 7a 8a 9a 10a 11a 12p '13 '1p 2p 3p 4p 5p 6p 7p 8p 9p 10p 11p'.split()14 )15 visual_color = [16 '#313695',17 '#4575b4',18 '#74add1',19 '#abd9e9',20 '#e0f3f8',21 '#ffffbf',22 '#fee090',23 '#fdae61',24 '#f46d43',25 '#d73027',26 '#a50026',27 ]28 months = ['{}月'.format(i) for i in range(1, 13)]29 provinces = ['广东', '北京', '上海', '江西', '湖南', '浙江', '江苏']30 guangdong_city = ['汕头市', '汕尾市', '揭阳市', '阳江市', '肇庆市', '广州市', '惠州市']31 country = [32 'China',33 'Canada',34 'Brazil',35 'Russia',36 'United States',37 'Africa',38 'Germany',39 ]40 days_attrs = ['{}天'.format(i) for i in range(30)]41 days_values = [random.randint(1, 30) for _ in range(30)]4243 def choose(self) -> list:44 return random.choice(45 [46 self.clothes,47 self.drinks,48 self.phones,49 self.fruits,50 self.animal,51 self.dogs,52 self.week,53 ]54 )5556 @staticmethod57 def values(start: int = 20, end: int = 150) -> list:58 return [random.randint(start, end) for _ in range(7)]5960 @staticmethod61 def rand_color():62 return random.choice(63 [64 '#c23531',65 '#2f4554',66 '#61a0a8',67 '#d48265',68 '#749f83',69 '#ca8622',70 '#bda29a',71 '#6e7074',72 '#546570',73 '#c4ccd3',74 '#f05b72',75 '#444693',76 '#726930',77 '#b2d235',78 '#6d8346',79 '#ac6767',80 '#1d953f',81 '#6950a1',82 ]83 )

常用的图表类型

Bar:柱状图/条形图

柱状图对应的模块是 Bar

除此之外可以设置全局配置和系列配置项。配置项都是基于 options

示例代码:

1# coding: utf-8 2from example.commons import Faker 3from pyecharts import options as opts 4from pyecharts.charts import Bar 5 6def bar_base(): 7 8 bar = Bar(init_opts=opts.InitOpts(page_title='bar页面')) # 设置html页面标题 9 # bar.add_xaxis(['衬衫', '羊毛衫', '雪纺衫', '裤子', '高跟鞋', '袜子']) # 设置x轴的参数1011 bar.add_xaxis(Faker.choose())12 bar.add_yaxis('A', Faker.values())13 bar.add_yaxis('B', Faker.values())1415 # 设置全局配置项,可选16 bar.set_global_opts(opts.TitleOpts(title='主标题', subtitle='副标题'))17 # render 会生成本地 HTML 文件,默认会在当前目录生成 render.html 文件18 bar.render('bar.html') # 也可以自己指定文件名1920if __name__ == '__main__':21 bar_base()

运行代码后会在当前目录生成一个 ”bar.html“ 的文件,我们在浏览器中打开它。效果图如下:

bar.html

生成的页面支持-点击取消显示某 Series

只显示A

除了上述的使用方法之外,pyecharts 所有方法均支持链式调用!

翻转XY轴

代码如下:

 1def bar_reversal_axis() -> Bar: 2 3 # pyecharts 所有方法均支持链式调用。 4 c = ( 5 Bar(init_opts=opts.InitOpts(page_title='bar页面')) 6 .add_xaxis(Faker.choose()) 7 .add_yaxis('商家A', Faker.values()) 8 .add_yaxis('商家B', Faker.values()) 9 .reversal_axis()10 .set_global_opts(toolbox_opts=opts.ToolboxOpts()) # 设置工具箱配置项11 .set_series_opts(label_opts=opts.LabelOpts(position='right')) # 系列配置项12 .set_global_opts(title_opts=opts.TitleOpts(title='Bar-翻转 XY 轴')) # 全局配置项13 )14 return c151617if __name__ == '__main__':18 bar_reversal_axis().render('bar.html')

效果图如下:

翻转 XY 轴

部分堆叠数据

同个类目轴上系列配置相同的 stack 值可以堆叠放置

例如堆叠放置A,B的代码如下:

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

部分堆叠数据

区域缩放配置项

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

区域缩放配置项的设置方法在 DataZoomOpts 类中,我们可以点进去查看源码:

源码

其中,主要用到的参数含义如下:

1 type_: str = 'slider', # 组件类型,可选 'slider', 'inside'2 # 拖动时,是否实时更新系列的视图。如果设置为 false,则只在拖拽结束的时候更新。3 is_realtime: bool = True,45 # 布局方式是横还是竖。可选值为:'horizontal', 'vertical'6orient: str = 'horizontal',

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

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

HeatMap:热力图

热力图主要通过颜色去表现数值的大小,必须要配合 visualMap 组件使用。

直角坐标系上必须要使用两个类目轴。

热力图使用的方法函数是 add_yaxis,下面是函数的用法说明:

 1def add_yaxis( 2 # 系列名称,用于 tooltip 的显示,legend 的图例筛选。 3 series_name: str, 4 5 # Y 坐标轴数据 6 yaxis_data: Sequence, 7 8 # 系列数据项 9 value: Sequence,1011 # 是否选中图例12 is_selected: bool = True,1314 # 使用的 x 轴的 index,在单个图表实例中存在多个 x 轴的时候有用。15 xaxis_index: Optional[Numeric] = None,1617 # 使用的 y 轴的 index,在单个图表实例中存在多个 y 轴的时候有用。18 yaxis_index: Optional[Numeric] = None,1920 # 标签配置项,参考 `series_options.LabelOpts`21 label_opts: Union[opts.LabelOpts, dict] = opts.LabelOpts(),2223 # 标记点配置项,参考 `series_options.MarkPointOpts`24 markpoint_opts: Union[opts.MarkPointOpts, dict, None] = None,2526 # 标记线配置项,参考 `series_options.MarkLineOpts`27 markline_opts: Union[opts.MarkLineOpts, dict, None] = None,2829 # 提示框组件配置项,参考 `series_options.TooltipOpts`30 tooltip_opts: Union[opts.TooltipOpts, dict, None] = None,3132 # 图元样式配置项,参考 `series_options.ItemStyleOpts`33 itemstyle_opts: Union[opts.ItemStyleOpts, dict, None] = None,34)35

其中series_name, yaxis_data, value 是三个必传参数

示例代码如下:

1import random 2from example.commons import Faker 3from pyecharts import options as opts 4from pyecharts.charts import HeatMap 5 6 7def heatmap_base() -> HeatMap: 8 value = [[i, j, random.randint(0, 50)] for i in range(24) for j in range(7)] 9 c = (10 HeatMap()11 .add_xaxis(Faker.clock)12 .add_yaxis('series', Faker.week, value)13 .set_global_opts(title_opts=opts.TitleOpts(title='HeatMap-基本示例'),14 visualmap_opts=opts.VisualMapOpts(), )15 )1617 return c181920if __name__ == '__main__':21 heatmap_base().render('heatMap.html')

WordCloud:词云图

词云图用的的方法函数是 add,使用方法如下:

 1def add( 2 # 系列名称,用于 tooltip 的显示,legend 的图例筛选。 3 series_name: str, 4 5 # 系列数据项,[(word1, count1), (word2, count2)] 6 data_pair: Sequence, 7 8 # 词云图轮廓,有 'circle', 'cardioid', 'diamond', 'triangle-forward', 'triangle', 'pentagon', 'star' 可选 9 shape: str = 'circle',1011 # 单词间隔12 word_gap: Numeric = 20,1314 # 单词字体大小范围15 word_size_range=None,1617 # 旋转单词角度18 rotate_step: Numeric = 45,1920 # 提示框组件配置项,参考 `series_options.TooltipOpts`21 tooltip_opts: Union[opts.TooltipOpts, dict, None] = None,22)23

其中series_name, data_pair, shape 是三个必传参数

示例代码如下:

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

效果图如下:

NBA词云图

保存为图片

前面我们讲的几种图形生成方法,最后都保存成 html文件,pyecharts 还提供了保存为图片的方式

需要安装 snapshot_selenium,同时需要将浏览器驱动保存路径 cheromdriver.exe 加入到环境变量中

1pip install snapshot_selenium

示例代码如下:

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

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

总结

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

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

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

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

5.利用render()方法来报存图表

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多