pyecharts_pyecharts 大屏 - CSDN
  • Python数据可视化 pyecharts实战

    千人学习 2019-10-30 14:29:46
         本课程是pyecharts的入门课程。主要介绍了pyecharts函数库的...主要内容包括pyecharts简介,用pyecharts绘制离散点、折线、柱状图、柱状图和折线图组合、饼图、地理图等,而且这些图表是可交互的。
  • 源 | 机器之心 文 | wengJJpyecharts是一款将python与echarts结合的强大的数据可视化工具,本文将为你阐述pyecharts的使用细则前言...
        

     源 | 机器之心  文 | wengJJ

    pyecharts是一款将python与echarts结合的强大的数据可视化工具,本文将为你阐述pyecharts的使用细则

    前言

    我们都知道python上的一款可视化工具matplotlib,而前些阵子做一个Spark项目的时候用到了百度开源的一个可视化JS工具-Echarts,可视化类型非常多,但是得通过导入js库在Java Web项目上运行,平时用Python比较多,于是就在想有没有Python与Echarts结合的轮子。Google后,找到一个国人开发的一个Echarts与Python结合的轮子:pyecharts,下面就来简述下pyecharts一些使用细则:

    安装

    写这篇文章用的是Win环境,首先打开命令行(win+R),输入:

    pip install pyecharts

    但笔者实测时发现,由于墙的原因,下载时会出现断线和速度过慢的问题导致下载失败,所以建议通过清华镜像来进行下载:

    pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyecharts

    640?wx_fmt=png

    出现上方的信息,即代表下载成功,我们可以来进行下一步的实验了!

    使用实例

    使用之前我们要强调一点:就是python2.x和python3.x的编码问题,在python3.x中你可以把它看做默认是unicode编码,但在python2.x中并不是默认的,原因就在它的bytes对象定义的混乱,而pycharts是使用unicode编码来处理字符串和文件的,所以当你使用的是python2.x时,请务必在上方插入此代码:

    from __future__ import unicode_literals

    现在我们来开始正式使用pycharts,这里我们直接使用官方的数据:

    柱状图-Bar

    //导入柱状图-Bar from pyecharts import Bar //设置行名 columns = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"] //设置数据 data1 = [2.0, 4.9, 7.0, 23.2, 25.6, 76.7, 135.6, 162.2, 32.6, 20.0, 6.4, 3.3] data2 = [2.6, 5.9, 9.0, 26.4, 28.7, 70.7, 175.6, 182.2, 48.7, 18.8, 6.0, 2.3] //设置柱状图的主标题与副标题 bar = Bar("柱状图", "一年的降水量与蒸发量") //添加柱状图的数据及配置项 bar.add("降水量", columns, data1, mark_line=["average"], mark_point=["max", "min"]) bar.add("蒸发量", columns, data2, mark_line=["average"], mark_point=["max", "min"]) //生成本地文件(默认为.html文件) bar.render()

    运行结果如下:

    640?wx_fmt=png

    简单的几行代码就可以将数据进行非常好看的可视化,而且还是动态的,在这里还是要安利一下jupyter,pyecharts在v0.1.9.2版本开始,在jupyter上直接调用实例(例如上方直接调用bar)就可以将图表直接表示出来,非常方便。

    笔者数了数,目前pyecharts上的图表大概支持到二十多种,接下来,我们再用上方的数据来生成几个数据挖掘常用的图表示例:

    饼图-Pie

    //导入饼图Pie from pyecharts import Pie //设置主标题与副标题,标题设置居中,设置宽度为900 pie = Pie("饼状图", "一年的降水量与蒸发量",title_pos='center',width=900) //加入数据,设置坐标位置为【25,50】,上方的colums选项取消显示 pie.add("降水量", columns, data1 ,center=[25,50],is_legend_show=False) //加入数据,设置坐标位置为【75,50】,上方的colums选项取消显示,显示label标签 pie.add("蒸发量", columns, data2 ,center=[75,50],is_legend_show=False,is_label_show=True) //保存图表 pie.render()

    640?wx_fmt=png

    箱体图-Boxplot

    //导入箱型图Boxplot from pyecharts import Boxplot  boxplot = Boxplot("箱形图", "一年的降水量与蒸发量") x_axis = ['降水量','蒸发量'] y_axis = [data1,data2] //prepare_data方法可以将数据转为嵌套的 [min, Q1, median (or Q2), Q3, max] yaxis = boxplot.prepare_data(y_axis)        boxplot.add("天气统计", x_axis, _yaxis) boxplot.render()

    640?wx_fmt=png

    折线图-Line

    from pyecharts import Line line = Line("折线图","一年的降水量与蒸发量") //is_label_show是设置上方数据是否显示 line.add("降水量", columns, data1, is_label_show=True) line.add("蒸发量", columns, data2, is_label_show=True) line.render()

    640?wx_fmt=png

    雷达图-Rader

    from pyecharts import Radar radar = Radar("雷达图", "一年的降水量与蒸发量") //由于雷达图传入的数据得为多维数据,所以这里需要做一下处理 radar_data1 = [[2.0, 4.9, 7.0, 23.2, 25.6, 76.7, 135.6, 162.2, 32.6, 20.0, 6.4, 3.3]] radar_data2 = [[2.6, 5.9, 9.0, 26.4, 28.7, 70.7, 175.6, 182.2, 48.7, 18.8, 6.0, 2.3]] //设置column的最大值,为了雷达图更为直观,这里的月份最大值设置有所不同 schema = [      ("Jan", 5), ("Feb",10), ("Mar", 10),     ("Apr", 50), ("May", 50), ("Jun", 200),     ("Jul", 200), ("Aug", 200), ("Sep", 50),     ("Oct", 50), ("Nov", 10), ("Dec", 5) ] //传入坐标 radar.config(schema) radar.add("降水量",radar_data1) //一般默认为同一种颜色,这里为了便于区分,需要设置item的颜色 radar.add("蒸发量",radar_data2,item_color="#1C86EE") radar.render()

    640?wx_fmt=png

    散点图-scatter

    from pyecharts import Scatter scatter = Scatter("散点图", "一年的降水量与蒸发量") //xais_name是设置横坐标名称,这里由于显示问题,还需要将y轴名称与y轴的距离进行设置 scatter.add("降水量与蒸发量的散点分布", data1,data2,xaxis_name="降水量",yaxis_name="蒸发量",             yaxis_name_gap=40) scatter.render()

    640?wx_fmt=png


    图表布局 Grid

    由于标题与图表是属于两个不同的控件,所以这里必须对下方的图表Line进行标题位置设置,否则会出现标题重叠的bug。

    from pyecharts import Grid //设置折线图标题位置 line = Line("折线图","一年的降水量与蒸发量",title_top="45%") line.add("降水量", columns, data1, is_label_show=True) line.add("蒸发量", columns, data2, is_label_show=True) grid = Grid() //设置两个图表的相对位置 grid.add(bar, grid_bottom="60%") grid.add(line, grid_top="60%") grid.render()

    640?wx_fmt=png

    from pyecharts import Overlap overlap = Overlap() bar = Bar("柱状图-折线图合并", "一年的降水量与蒸发量") bar.add("降水量", columns, data1, mark_point=["max", "min"]) bar.add("蒸发量", columns, data2, mark_point=["max", "min"]) overlap.add(bar) overlap.add(line) overlap.render()

    640?wx_fmt=png


    总结

    1. 导入相关图表包

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

    3. 利用add()方法进行数据输入与图表设置(可以使用print_echarts_options()来输出所有可配置项)

    4. 利用render()方法来进行图表保存

    pyecharts还有许多好玩的3D图表和地图图表,个人觉得地图图表是最好玩的,各位有兴趣可以去pyecharts的使用手册查看,有中文版的非常方便:pyecharts

    -END-

    本文选自「机器之心」

    公众号内回复“1”带你进粉丝群640?wx_fmt=gif

    展开全文
  • python 包的使用 (二)——pyecharts

    千次阅读 多人点赞 2018-06-17 17:31:45
    Echarts是百度出的很有名 也... pyecharts 是一个用于生成 Echarts 图表的类库。实际上就是 Echarts 与 Python 的对接。网址: https://github.com/chenjiandongx/pyecharts/blob/master/docs/zh-cn/documentatio...

    如何做Python 的数据可视化?

    pyecharts 是一个用于生成 Echarts 图表的类库。 Echarts 是百度开源的一个数据可视化 JS 库。主要用于数据可视化。

    一、安装

    pyecharts 兼容 Python2 和 Python3。目前版本为 0.1.4

    1.pip install pyecharts

    Bar(柱状图/条形图)   
    Bar3D(3D 柱状图)   
    Boxplot(箱形图)   
    EffectScatter(带有涟漪特效动画的散点图)   
    Funnel(漏斗图)   
    Gauge(仪表盘)   
    Geo(地理坐标系)   
    Graph(关系图)   
    HeatMap(热力图)   
    Kline(K线图)   
    Line(折线/面积图)   
    Line3D(3D 折线图)   
    Liquid(水球图)   
    Map(地图)   
    Parallel(平行坐标系)   
    Pie(饼图)   
    Polar(极坐标系)   
    Radar(雷达图)   
    Sankey(桑基图)   
    Scatter(散点图)   
    Scatter3D(3D 散点图)   
    ThemeRiver(主题河流图)   
    WordCloud(词云图) 

    2.公共属性

        1.标题栏的属性:一般在实例化(初始化)类型时给与,如bar = Bar(“大标题”,“副标题”,···各种属性···)

            title_color = “颜色”:标题颜色,可以是‘red’或者‘#0000’

            title_pos = ‘位置’:标题位置,如‘center’,‘left’···

            width = 1200:图表的宽

            height = 800:图表的高

            background_color = "颜色":图表的背景色

            ·····

       2、标签栏的属性:

             bar.add(“标签”,x,values,···属性···)

            'mark_'类,通个'mark_'显示,如 mark_point['max', 'min', 'average']:标出最大最小和平均值的点,

                    mark_point_textcolor,mark_line_symbolsize·····

            'legend_'类,如legend_pos=‘left’:标签的位置

             'is_'类,如is_label_show=True:显示每个点的值,is_datazoom_show=True:实现移动控制x轴的数量

                    is_convert = True:x,y轴是否调换

    二、入门

    1.首先开始来绘制你的第一个图表

    from pyecharts import Bar
    bar =Bar("我的第一个图表""这里是副标题")
    bar.use_theme('dark')  #设置背景色
    bar.add("服装", ["衬衫""羊毛衫""雪纺衫""裤子""高跟鞋""袜子"], [52036107590])
    bar.show_config()#打印输出图表的所有配置项
    bar.render()#默认将会在根目录下生成一个 render.html 的文件

    Tip:可以按右边的下载按钮将图片下载到本地

    • add()主要方法,用于添加图表的数据和设置各种配置项

    • show_config()打印输出图表的所有配置项

    • render()默认将会在根目录下生成一个 render.html 的文件,支持 path 参数,设置文件保存位置,如 render(r"e:my_first_chart.html"),文件用浏览器打开.默认的编码类型为 UTF-8,在 Python3 中是没什么问题的,Python3 对中文的支持好很多。但是在 Python2 中,编码的处理是个很头疼的问题,暂时没能找到完美的解决方法,目前只能通过文本编辑器自己进行二次编码,我用的是 Visual Studio Code,先通过 Gbk 编码重新打开,然后再用 UTF-8 重新保存,这样用浏览器打开的话就不会出现中文乱码问题了。

    基本上所有的图表类型都是这样绘制的:

    1. chart_name = Type() 初始化具体类型图表。

    2. add() 添加数据及配置项。

    3. render() 生成 .html 文件。

    三、图表类型

    1.柱状图

    某地区的降水量,并转换x,y轴

    attr = ['{}月'.format(i) for i in range(1,13)]
    v1 = [2.0,4.9,7.0,23.2,25.6,76.7,135.6,162.2,32.6,20.0,6.4,3.3]
    v2 = [2.6,5.9,9.0,26.4,28.7,70.7,175.6,182.8,48.7,18.8,6.0,2.3]
    bar = Bar("柱状图示例")
    bar.add("蒸发量", attr,v1,mark_line = ['average'],mark_point = ["max","min"])#画平均线,标记最大最小值
    bar.add("降水量", attr,v2,mark_line = ['average'],mark_point = ["max","min"])
    bar.render()
    
    bar = Bar("x 轴和 y 轴交换") #print交换x轴和y轴
    bar.add("蒸发量", attr, v1,mark_line = ['average'],mark_point = ["max","min"]) 
    bar.add("降水量", attr, v2,mark_line = ['average'],mark_point = ["max","min"], is_convert=True)#is_convert是否转换
    bar.render()
    

    2.Pie(饼图)

    from pyecharts import Pie
    attr =["衬衫""羊毛衫""雪纺衫""裤子""高跟鞋""袜子"]v1 =[111213101010]pie =Pie("饼图示例")
    pie.add("", attr, v1, is_label_show=True)
    pie.show_config()
    pie.render()

    attr =["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"]
    v1 =[11, 12, 13, 10, 10, 10]
    v2 =[19, 21, 32, 20, 20, 33]
    pie =Pie("饼图实例2-玫瑰图示例", title_pos='center', width=900,title_text_size=40)#标题,title_pos调整标题位置,title_text_size调整主标题文字大小
    pie.add("商品A",attr,v1,center=[25, 50], is_random=True, radius=[30, 75], rosetype='radius')
    pie.add("商品B",attr,v2,center=[75, 50], is_random=True, radius=[30, 75], rosetype='area', is_legend_show=False, is_label_show=True)
    pie.show_config()
    pie.render()
    #attr为不同的属性名称; v为从表格读出来的,不同属性对用的数据;center为调整饼图圆心坐标; is_random为是否随即排列颜色列表(bool);
    #radius为半径,第一个为内半径,第二个是外半径;
    #rosetype为是否展示成南丁格尔图( 'radius' 圆心角展现数据半分比,半径展现数据大小;'area' 圆心角相同,为通过半径展现数据大小)
    # is_label_show为是否显示标签(各个属性的数据信息); label_text_size为调整标签字体大小;

    2.各类电影中"好片"所占的比例

    from pyecharts import Pie
    pie =Pie('各类电影中"好片"所占的比例', "数据来着豆瓣", title_pos='center')
    pie.add("", ["剧情", ""], [25, 75], center=[10, 30], radius=[18, 24], label_pos='center', is_label_show=True, label_text_color=None, )
    pie.add("", ["奇幻", ""], [24, 76], center=[30, 30], radius=[18, 24], label_pos='center', is_label_show=True, label_text_color=None, legend_pos='left')
    pie.add("", ["爱情", ""], [14, 86], center=[50, 30], radius=[18, 24], label_pos='center', is_label_show=True, label_text_color=None)
    pie.add("", ["惊悚", ""], [11, 89], center=[70, 30], radius=[18, 24], label_pos='center', is_label_show=True, label_text_color=None)
    pie.add("", ["冒险", ""], [27, 73], center=[90, 30], radius=[18, 24], label_pos='center', is_label_show=True, label_text_color=None)
    pie.add("", ["动作", ""], [15, 85], center=[10, 70], radius=[18, 24], label_pos='center', is_label_show=True, label_text_color=None)
    pie.add("", ["喜剧", ""], [54, 46], center=[30, 70], radius=[18, 24], label_pos='center', is_label_show=True, label_text_color=None)
    pie.add("", ["科幻", ""], [26, 74], center=[50, 70], radius=[18, 24], label_pos='center', is_label_show=True, label_text_color=None)
    pie.add("", ["悬疑", ""], [25, 75], center=[70, 70], radius=[18, 24], label_pos='center', is_label_show=True, label_text_color=None)
    pie.add("", ["犯罪", ""], [28, 72], center=[90, 70], radius=[18, 24], label_pos='center', is_label_show=True, label_text_color=None, is_legend_show=True, legend_top="center")
    pie.show_config()
    pie.render()
    



    3.带有涟漪特效动画的散点图

    这段代码参考简书网 https://www.jianshu.com/p/b718c307a61c ,强烈推荐大家学习chenjiandongx大神的文章。完整代码如下:

    [python] view plain copy
    1. # -*- coding:utf-8 -*-  
    2. from pyecharts import EffectScatter  
    3.   
    4. es = EffectScatter("动态散点图各种图形示例")  
    5. es.add("", [10], [10], symbol_size=20, effect_scale=3.5, effect_period=3, symbol="pin")  
    6. es.add("", [20], [20], symbol_size=12, effect_scale=4.5, effect_period=4, symbol="rect")  
    7. es.add("", [30], [30], symbol_size=30, effect_scale=5.5, effect_period=5, symbol="roundRect")  
    8. es.add("", [40], [40], symbol_size=10, effect_scale=6.5, effect_brushtype='fill', symbol="diamond")  
    9. es.add("", [50], [50], symbol_size=16, effect_scale=5.5, effect_period=3, symbol="arrow")  
    10. es.add("", [60], [60], symbol_size=6, effect_scale=2.5, effect_period=3, symbol="triangle")  
    11. es.render()  
    运行结果如下图所示:

    4.绘制3D图形

    1.绘制3D折线图代码如下:

    [python] view plain copy
    1. # -*- coding:utf-8 -*-  
    2. from pyecharts import Line3D  
    3. import random  
    4. data = [[1,2,3,4], [1,2,3,4], [0,4,8,16]]  
    5. Line3D = Line3D("3D 折线图示例", width=1200, height=600)  
    6. Line3D.add("", data, is_visualmap=True)  
    7. Line3D.render()  
    输出图形如下所示:

    5.绘制Scatter(散点图)

    1.设置随机散点坐标,代码如下所示:
    [python] view plain copy
    1. # -*- coding:utf-8 -*-  
    2. from pyecharts import Scatter3D  
    3. import random  
    4. data = [[random.randint(0100), random.randint(0100), random.randint(0100)] for _ in range(80)]  
    5. range_color = ['#313695''#4575b4''#74add1''#abd9e9''#e0f3f8''#ffffbf',  
    6.                '#fee090''#fdae61''#f46d43''#d73027''#a50026']  
    7. scatter3D = Scatter3D("3D 散点图示例", width=1200, height=600)  
    8. scatter3D.add("", data, is_visualmap=True, visual_range_color=range_color)  
    9. scatter3D.render()         
    输出结果非常美观,如下图所示:


    2.
    from pyecharts import Scatter
    v1 =[10, 20, 30, 40, 50, 60]
    v2 =[10, 20, 30, 40, 50, 60]
    scatter =Scatter("散点图示例")
    scatter.add("A", v1, v2)
    scatter.add("B", v1[::-1], v2)
    scatter.show_config()
    scatter.render()

    3.散点打印Pyecharts字体

    from pyecharts import Scatter
    scatter =Scatter("散点图示例")
    v1, v2 =scatter.draw("F://anacondadaima//keshihua//1.png")
    scatter.add("pyecharts", v1, v2, is_random=True)
    scatter.show_config()
    scatter.render()


    6.仪表盘

    代码如下:

    [python] view plain copy
    1. # -*- coding:utf-8 -*-  
    2. from pyecharts import Gauge  
    3.   
    4. g = Gauge("仪表盘图形","副图标")  
    5. g.add("重大项目""投资占比"66.66)  
    6. g.show_config()  
    7. g.render("g.html")  

    输出图形如下所示:



    7.水球图

    1.水球图

    代码如下:

    [python] view plain copy
    1. # -*- coding:utf-8 -*-  
    2. from pyecharts import Liquid  
    3.   
    4. liquid = Liquid("水球图")  
    5. liquid.add("Liquid", [0.8])  
    6. liquid.show_config()  
    7. liquid.render()  

    输出如下图所示:



    2.水球图
    from pyecharts import Liquid
    liquid =Liquid("水球图示例")
    liquid.add("Liquid", [0.6, 0.5, 0.4, 0.3], is_liquid_outline_show=False)
    liquid.show_config()
    liquid.render()

    3.水球图

    from pyecharts import Liquid
    liquid =Liquid("水球图示例3")
    liquid.add("Liquid",[0.6, 0.5, 0.4, 0.3],is_liquid_animation=False,shape='diamond')
    liquid.show_config()
    liquid.render()

    8. 绘制中国地图


    如果直接绘制中国地图,只会显示一个角落,如下图所示:


    1.安装

    这是需要安装第三方地图支持包,代码如下:
        pip install echarts-countries-pypkg 
        pip install echarts-china-provinces-pypkg
        pip install echarts-china-cities-pypkg

        pip install echarts-countries-pypkg 
        pip install echarts-china-provinces-pypkg
        pip install echarts-china-cities-pypkg

     echarts-china-cities-pypkg是中国城市地图。安装过程如下图所示:








    2.绘制中国地图

    安装之后我们来看一个简单的中国地图代码,这是作者微信好友全国各省分布情况,代码如下:

    [python] view plain copy
    1. #-*- coding:utf-8 -*-  
    2. from pyecharts import Map  
    3. value =[26026802521451,  
    4.         415225411102]  
    5. attr =["安徽""北京""福建""广东""贵州""海南""河北""河南""黑龙江",  
    6.        "湖北""湖南""吉林""江苏""辽宁""山东""山西""陕西""上海",  
    7.        "四川""天津""云南""浙江""重庆"]  
    8. map=Map("各省微信好友分布", width=1200, height=600)  
    9. map.add("", attr, value, maptype='china', is_visualmap=True,  
    10.         visual_text_color='#000')  
    11. map.show_config()  
    12. map.render()  
    输出结果如下图所示,因为作者在北京读书,贵州人,所以这两个地方好友最多。


    再来看一组中国地图,全国的空气质量情况,代码如下:

    [python] view plain copy
    1. #-*- coding:utf-8 -*-  
    2. from pyecharts import Geo  
    3.   
    4. data = [  
    5.     ("海门"9),("鄂尔多斯"12),("招远"12),("舟山"12),("齐齐哈尔"14),("盐城"15),  
    6.     ("赤峰"16),("青岛"18),("乳山"18),("金昌"19),("泉州"21),("莱西"21),  
    7.     ("日照"21),("胶南"22),("南通"23),("拉萨"24),("云浮"24),("梅州"25)]  
    8. geo = Geo("全国主要城市空气质量""data from pm2.5",  
    9.           title_color="#fff", title_pos="center",  
    10.           width=1200, height=600, background_color='#404a59')  
    11. attr, value = geo.cast(data)  
    12. geo.add("", attr, value, visual_range=[0200],  
    13.         visual_text_color="#fff", symbol_size=15, is_visualmap=True)  
    14. geo.show_config()  
    15. geo.render("kongqi.html")  

    输出结果如下所示,它会提示错误“coordinates is not found”坐标没有定义,知乎说可以用 geo_cities_coords 参数自定义经纬度处理解决。



    而我的解决方法是怀疑中文乱码错误,并且成功解决,即中文前面加个u"贵阳",代码如下:
    [python] view plain copy
    1. #-*- coding:utf-8 -*-  
    2. from pyecharts import Geo  
    3.   
    4. data = [  
    5.     (u"海门"9),(u"鄂尔多斯"12),(u"招远"12),(u"舟山"12),(u"齐齐哈尔"14),(u"盐城"15),  
    6.     (u"赤峰"16),(u"青岛"18),(u"乳山"18),(u"金昌"19),(u"泉州"21),(u"莱西"21),  
    7.     (u"日照"21),(u"胶南"22),(u"南通"23),(u"拉萨"24),(u"云浮"24),(u"梅州"25)]  
    8. geo = Geo(u"全国主要城市空气质量""data from pm2.5",  
    9.           title_color="#fff", title_pos="center",  
    10.           width=1200, height=600, background_color='#404a59')  
    11. attr, value = geo.cast(data)  
    12. geo.add("", attr, value, visual_range=[0200],  
    13.         visual_text_color="#fff", symbol_size=15, is_visualmap=True)  
    14. geo.show_config()  
    15. geo.render("kongqi.html")  
    输出如下图所示:


    3.绘制贵州地图

    最后补充绘制贵州省地图的代码:

    [python] view plain copy
    1. #-*- coding:utf-8 -*-  
    2. from pyecharts import Map  
    3.   
    4. value = [9570304580,  
    5.          1025405]  
    6. attr = [u'贵阳市', u'遵义市',  u'六盘水市', u'安顺市', u'毕节市',   
    7.         u'铜仁市', u"黔东南苗族侗族自治州", u"黔南布依族苗族自治州",  
    8.         u"黔西南布依族苗族自治州"]  
    9. map = Map(u"贵州地图示例", width=1200, height=600)  
    10. map.add("", attr, value, maptype=u'贵州',  
    11.         is_visualmap=True, visual_text_color='#000')  
    12. map.show_config()  
    13. map.render()  

    输出如下图所示:





    9. Graph(关系图)

    1.力引导布局

    from pyecharts import Graph
    nodes = [{"name": "结点1", "symbolSize": 10},{"name": "结点2", "symbolSize": 20},{"name": "结点3", "symbolSize": 30},{"name": "结点4", "symbolSize": 40},{"name": "结点5", "symbolSize": 50},{"name": "结点6", "symbolSize": 40},{"name": "结点7", "symbolSize": 30},{"name": "结点8", "symbolSize": 20}]
    links = []
    for i in nodes:
         for j in nodes:
              links.append({"source": i.get('name'), "target": j.get('name')})
    graph = Graph("关系图-环形布局示例")
    graph.add("关系图1",nodes,links,is_label_show=True,repulsion=8000,layout='circular',label_text_color=None)
    graph.show_config()
    graph.render()
    

    2.微博转发关系图(没有实现)

    from pyecharts import Graph
    import json
    with open("..\json\weibo.json","r",encoding="utf-8") as f:
         j = json.load(f)
         nodes,links,categories,cont,mid,userl = j
    graph = Graph("微博转发关系图", width=1200, height=600)
    graph.add("关系图2", nodes, links, categories, label_pos="right", repulsion=50, is_legend_show=False,          line_curve=0.2, label_text_color=None)
    graph.show_config()
    graph.render()

    10. Line(折线/面积图)

    1.阶梯图

    from pyecharts import Line
    attr =["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"]
    v1 =[5, 20, 36, 10, 10, 100]
    v2 =[55, 60, 16, 20, 15, 80]
    line =Line("折线图示例")
    line.add("商家A", attr, v1, mark_point=["average"])
    line.add("商家B", attr, v2, is_smooth=True, mark_line=["max", "average"])
    line.show_config()
    line.render()
    line =Line("折线图-阶梯图示例")
    line.add("商家A", attr, v1, is_step=True, is_label_show=True)
    line.show_config()
    line.render()

    2.面积图

    from pyecharts import Line
    attr =["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"]
    v1 =[5, 20, 36, 10, 10, 100]
    v2 =[55, 60, 16, 20, 15, 80]
    line =Line("折线图-面积图示例")
    line.add("商家A", attr, v1, is_fill=True, line_opacity=0.2, area_opacity=0.4, symbol=None)
    line.add("商家B", attr, v2, is_fill=True, area_color='#000', area_opacity=0.3, is_smooth=True)
    line.show_config()
    line.render()
    




    11. Parallel(平行坐标系)

    from pyecharts import Parallel
    c_schema = [ {"dim": 0, "name": "data"}, {"dim": 1, "name": "AQI"}, {"dim": 2, "name": "PM2.5"}, {"dim": 3, "name": "PM10"}, {"dim": 4, "name": "CO"}, {"dim": 5, "name": "NO2"}, {"dim": 6, "name": "CO2"}, {"dim": 7, "name": "等级", "type": "category", "data": ['优', '良', '轻度污染', '中度污染', '重度污染', '严重污染']}]
    data = [ [1, 91, 45, 125, 0.82, 34, 23, "良"], [2, 65, 27, 78, 0.86, 45, 29, "良"], [3, 83, 60, 84, 1.09, 73, 27, "良"], [4, 109, 81, 121, 1.28, 68, 51, "轻度污染"], [5, 106, 77, 114, 1.07, 55, 51, "轻度污染"], [6, 109, 81, 121, 1.28, 68, 51, "轻度污染"], [7, 106, 77, 114, 1.07, 55, 51, "轻度污染"], [8, 89, 65, 78, 0.86, 51, 26, "良"], [9, 53, 33, 47, 0.64, 50, 17, "良"], [10, 80, 55, 80, 1.01, 75, 24, "良"], [11, 117, 81, 124, 1.03, 45, 24, "轻度污染"], [12, 99, 71, 142, 1.1, 62, 42, "良"], [13, 95, 69, 130, 1.28, 74, 50, "良"], [14, 116, 87, 131, 1.47, 84, 40, "轻度污染"]]
    parallel = Parallel("平行坐标系-用户自定义指示器")
    parallel.config(c_schema = c_schema)
    parallel.add("parallel", data)
    parallel.show_config()
    parallel.render()


    12 .Polar(极坐标系)

    1.
    from pyecharts import Polar
    radius =['周一', '周二', '周三', '周四', '周五', '周六', '周日']
    polar =Polar("极坐标系-堆叠柱状图示例", width=1200, height=600)
    polar.add("A", [1, 2, 3, 4, 3, 5, 1], radius_data=radius, type='barRadius', is_stack=True)
    polar.add("B", [2, 4, 6, 1, 2, 3, 1], radius_data=radius, type='barRadius', is_stack=True)
    polar.add("C", [1, 2, 3, 4, 1, 2, 5], radius_data=radius, type='barRadius', is_stack=True)
    polar.show_config()
    polar.render()

    2.
    from pyecharts import Polar
    radius =['周一', '周二', '周三', '周四', '周五', '周六', '周日']
    polar =Polar("极坐标系-堆叠柱状图示例2", width=1200, height=600)
    polar.add("", [1, 2, 3, 4, 3, 5, 1], radius_data=radius, type='barAngle', is_stack=True)
    polar.add("", [2, 4, 6, 1, 2, 3, 1], radius_data=radius, type='barAngle', is_stack=True)
    polar.add("", [1, 2, 3, 4, 1, 2, 5], radius_data=radius, type='barAngle', is_stack=True)
    polar.show_config()
    polar.render()

    3用极坐标系画出一个蜗牛壳

    import math 
    from pyecharts import Polar 
    data =[]
    for i in range(5):
         for j in range(101):
              theta =j /100*360
              alpha =i *360+theta
              r =math.pow(math.e, 0.003*alpha)
              data.append([r, theta])
    polar = Polar("极坐标系示例")
    polar.add("", data, symbol_size=0, symbol='circle', start_angle=-25, is_radiusaxis_show=False, area_color="#f3c5b3", area_opacity=0.5, is_angleaxis_show=False)
    polar.show_config()
    polar.render()
    
    



    4.用极坐标系画出一个爱心

    import math 
    from pyecharts import Polar
    data =[]
    for i in range(101):
         theta =i /100*360
         r =5*(1+math.sin(theta /180*math.pi))
         data.append([r, theta])
         hour = [i for i in range(1, 25)]
    polar =Polar("极坐标系示例", width=1200, height=600)
    polar.add("Love", data, angle_data=hour, boundary_gap=False,start_angle=0)
    polar.show_config()
    polar.render()

    5.用极坐标系画出一朵小花

    import math
    from pyecharts import Polar
    data =[]
    for i in range(361):
         t =i /180*math.pi
         r =math.sin(2*t) *math.cos(2*t)
         data.append([r, i])
    polar =Polar("极坐标系示例", width=1200, height=600)
    polar.add("Color-Flower", data, start_angle=0, symbol=None, axis_range=[0, None], area_color="#f71f24", area_opacity=0.6)
    polar.show_config()
    polar.render()

    13 Radar(雷达图)

    1.
    from pyecharts import Radar
    schema = [("销售", 6500), ("管理", 16000), ("信息技术", 30000), ("客服", 38000), ("研发", 52000), ("市场", 25000)]
    v1 = [[4300, 10000, 28000, 35000, 50000, 19000]]
    v2 =[[5000, 14000, 28000, 31000, 42000, 21000]]
    radar = Radar()
    radar.config(schema)
    radar.add("预算分配", v1, is_splitline=True, is_axisline_show=True)
    radar.add("实际开销", v2, label_color=["#4e79a7"], is_area_show=False)
    radar.show_config()

    2.
    from pyecharts import Radar
    value_bj = [ [55, 9, 56, 0.46, 18, 6, 1], [25, 11, 21, 0.65, 34, 9, 2], [56, 7, 63, 0.3, 14, 5, 3], [33, 7, 29, 0.33, 16, 6, 4]]
    value_sh = [ [91, 45, 125, 0.82, 34, 23, 1], [65, 27, 78, 0.86, 45, 29, 2], [83, 60, 84, 1.09, 73, 27, 3], [109, 81, 121, 1.28, 68, 51, 4]]
    c_schema = [{"name": "AQI", "max": 300, "min": 5}, {"name": "PM2.5", "max": 250, "min": 20}, {"name": "PM10", "max": 300, "min": 5}, {"name": "CO", "max": 5}, {"name": "NO2", "max": 200}, {"name": "SO2", "max": 100}]
    radar = Radar()
    radar.config(c_schema=c_schema, shape='circle')
    radar.add("北京", value_bj, item_color="#f9713c", symbol=None)
    radar.add("上海", value_sh, item_color="#b3e4a1", symbol=None)
    radar.show_config()


    14. WordCloud(词云图)

    1.
    from pyecharts import WordCloud
    name = ['Sam S Club', 'Macys', 'Amy Schumer', 'Jurassic World', 'Charter Communications', 'Chick Fil A', 'Planet Fitness', 'Pitch Perfect', 'Express', 'Home', 'Johnny Depp', 'Lena Dunham', 'Lewis Hamilton', 'KXAN', 'Mary Ellen Mark', 'Farrah Abraham', 'Rita Ora', 'Serena Williams', 'NCAA baseball tournament', 'Point Break']
    value = [10000, 6181, 4386, 4055, 2467, 2244, 1898, 1484, 1112, 965, 847, 582, 555, 550, 462, 366, 360, 282, 273, 265]
    wordcloud = WordCloud(width=1300, height=620)
    wordcloud.add("", name, value, word_size_range=[20, 100])
    wordcloud.show_config()
    wordcloud.render()



    个人分类: python

    展开全文
  • python绘图-pyecharts

    2019-02-23 11:12:26
    pyecharts 是一个用于生成 Echarts 图表的类库。Echarts 是百度开源的一个数据可视化 JS 库。用 Echarts 生成的图可视化效果非常棒,为了与 Python 进行对接,方便在 Python 中直接使用数据生成图。 2.绘图 2.1条形...

    1.简介

    pyecharts 是一个用于生成 Echarts 图表的类库。Echarts 是百度开源的一个数据可视化 JS 库。用 Echarts 生成的图可视化效果非常棒,为了与 Python 进行对接,方便在 Python 中直接使用数据生成图。

    2.绘图

    2.1条形图
    from pyecharts import Bar
    
    
    movieName = ["战狼2","速度","功夫瑜伽","西游伏妖篇","变形金刚5","摔跤吧"]
    movieMoney = [56.01, 26.94, 17.53, 16.49, 15.45, 12.96]
    
    print(len(movieName), len(movieMoney))
    bar = Bar(title="某年内地电影票房前20的电影", subtitle="这是一个子标题")
    
    # 添加图表的数据, 或者配置信息
    bar.add("电影信息",movieName, movieMoney)
    
    # 默认情况下会生成一个render.html文件
    bar.render()
    

    在这里插入图片描述

    from pyecharts import Bar
    
    x_movies_name = ["猩球崛起", "敦刻尔克", "蜘蛛侠", "战狼2"]
    y_16 = [15746, 312, 4497, 319]
    y_15 = [12357, 156, 2045, 168]
    y_14 = [2358, 399, 2358, 362]
    
    bar = Bar(title="某年内地电影票房前20的电影 matplotlib.font_manager.FontProperties ", subtitle="子标题")
    bar.add("2017-09-14", x_movies_name, y_14, mark_line=['min', 'max'], mark_point=['average'])
    bar.add("2017-09-15", x_movies_name, y_15)
    bar.add("2017-09-16", x_movies_name, y_16)
    
    bar.render()
    
    2.2散点图
    from pyecharts import EffectScatter, Scatter, Scatter3D
    
    x_march = list(range(1, 32))
    y_temp_march = [11, 17, 16, 11, 12, 11, 12, 6, 6, 7, 8, 9, 12, 15, 14, 17, 18, 21, 16, 17, 20, 14, 15, 15, 15, 19, 21,
                    22, 22, 22, 23]
    
    
    # scatter= EffectScatter("北京3月份每天白天的最高气温随时间(天)变化的散点图")
    scatter= Scatter("北京3月份白天变化的散点图", subtitle="xxxx")
    # symbol_size散点图标记的大小;
    scatter.add("3 月", x_march, y_temp_march, symbol_size=10, line_color='red')
    scatter.add("4 月", x_march, y_temp_march, symbol_size=30)
    scatter.render()
    

    在这里插入图片描述

    2.3漏斗图
    from pyecharts import Funnel
    
    x_movies_name = ["猩球崛起", "敦刻尔克", "蜘蛛侠", "战狼2"]
    y_16 = [20, 40, 60, 80]
    funnel = Funnel("xxxx")
    funnel.add("电影信息", x_movies_name, y_16)
    funnel.render()
    

    在这里插入图片描述

    2.4仪表盘图
    from pyecharts import  Gauge
    import psutil
    
    
    cpu_percent = psutil.cpu_percent()
    print(cpu_percent)
    gauge = Gauge("CPU使用率")
    gauge.add("cpu", "CPU使用率", cpu_percent)
    gauge.render()
    

    在这里插入图片描述

    2.5水球图
    from pyecharts import  Liquid
    import psutil
    
    # cpu_percent = psutil.cpu_percent()
    # print(cpu_percent)
    
    from pyecharts import Liquid
    
    # liquid = Liquid("xxxx")
    # liquid.add("Liquid", [0.6])
    # liquid.render()
    
    from pyecharts import Liquid
    
    liquid = Liquid("xxxx")
    liquid.add("Liquid", [0.6, 0.5, 0.4, 0.3],  shape='pin')
    liquid.render()
    

    在这里插入图片描述

    2.6饼状图
    from pyecharts import  Pie
    
    attr = ["男", '女', '其他']
    data = [100, 180, 2]
    
    pie = Pie("example")
    # 是否直接显示label信息
    pie.add("", attr, data, is_label_show=True)
    pie.render()
    

    在这里插入图片描述

    2.7折线图
    import random
    from pyecharts import Line
    
    # 图表的x轴的数据, 是一个可迭代的数据类型
    x_times = list(range(0,30))
    # 图表的y轴的数据, 是一个可迭代的数据类型
    y_temp_3 = [random.randint(20, 35) for i in range(30)]
    y_temp_10 = [random.randint(20, 35) for j in range(30)]
    
    
    line  = Line("折线图")
    #
    # line.add("", x_times, y_temp_3, mark_line=['max'], mark_point=['min'])
    # line.add("", x_times, y_temp_10, mark_line=['max'], mark_point=['min'])
    
    # # 折线图---阶梯图
    # line.add("", x_times, y_temp_3, mark_line=['max'], mark_point=['min'], is_step=True)
    # line.add("", x_times, y_temp_10, mark_line=['max'], mark_point=['min'], is_step=True)
    
    # pip install echarts-countries-pypkg
    # pip install echarts-china-provinces-pypkg
    # pip install echarts-china-cities-pypkg
    # pip install echarts-china-counties-pypkg
    # # # 折线图---面积图
    # 设置透明度
    line.add("", x_times, y_temp_3,  is_fill=True, area_color='red', area_opacity=0.3)
    line.add("", x_times, y_temp_10,  is_fill=True, area_color='green', area_opacity=0.2)
    
    line.render()
    

    在这里插入图片描述

    2.8地球绘制

    官网网址: http://pyecharts.org/#/zh-cn/charts_base

    from pyecharts import Geo
    
    data = [
        ("海门", 9),("鄂尔多斯", 12),("招远", 12),("舟山", 12),("齐齐哈尔", 14),("盐城", 15),
        ("赤峰", 16),("青岛", 18),("乳山", 18),("金昌", 19),("泉州", 21),("莱西", 21),
        ("日照", 21),("胶南", 22),("南通", 23),("拉萨", 24),("云浮", 24),("梅州", 25),
        ("文登", 25),("上海", 25),("攀枝花", 25),("威海", 25),("承德", 25),("厦门", 26),
        ("汕尾", 26),("潮州", 26),("丹东", 27),("太仓", 27),("曲靖", 27),("烟台", 28),
        ("福州", 29),("瓦房店", 30),("即墨", 30),("抚顺", 31),("玉溪", 31),("张家口", 31),
        ("阳泉", 31),("莱州", 32),("湖州", 32),("汕头", 32),("昆山", 33),("宁波", 33),
        ("湛江", 33),("揭阳", 34),("荣成", 34),("连云港", 35),("葫芦岛", 35),("常熟", 36),
        ("东莞", 36),("河源", 36),("淮安", 36),("泰州", 36),("南宁", 37),("营口", 37),
        ("惠州", 37),("江阴", 37),("蓬莱", 37),("韶关", 38),("嘉峪关", 38),("广州", 38),
        ("延安", 38),("太原", 39),("清远", 39),("中山", 39),("昆明", 39),("寿光", 40),
        ("盘锦", 40),("长治", 41),("深圳", 41),("珠海", 42),("宿迁", 43),("咸阳", 43),
        ("铜川", 44),("平度", 44),("佛山", 44),("海口", 44),("江门", 45),("章丘", 45),
        ("肇庆", 46),("大连", 47),("临汾", 47),("吴江", 47),("石嘴山", 49),("沈阳", 50),
        ("苏州", 50),("茂名", 50),("嘉兴", 51),("长春", 51),("胶州", 52),("银川", 52),
        ("张家港", 52),("三门峡", 53),("锦州", 54),("南昌", 54),("柳州", 54),("三亚", 54),
        ("自贡", 56),("吉林", 56),("阳江", 57),("泸州", 57),("西宁", 57),("宜宾", 58),
        ("呼和浩特", 58),("成都", 58),("大同", 58),("镇江", 59),("桂林", 59),("张家界", 59),
        ("宜兴", 59),("北海", 60),("西安", 61),("金坛", 62),("东营", 62),("牡丹江", 63),
        ("遵义", 63),("绍兴", 63),("扬州", 64),("常州", 64),("潍坊", 65),("重庆", 66),
        ("台州", 67),("南京", 67),("滨州", 70),("贵阳", 71),("无锡", 71),("本溪", 71),
        ("克拉玛依", 72),("渭南", 72),("马鞍山", 72),("宝鸡", 72),("焦作", 75),("句容", 75),
        ("北京", 79),("徐州", 79),("衡水", 80),("包头", 80),("绵阳", 80),("乌鲁木齐", 84),
        ("枣庄", 84),("杭州", 84),("淄博", 85),("鞍山", 86),("溧阳", 86),("库尔勒", 86),
        ("安阳", 90),("开封", 90),("济南", 92),("德阳", 93),("温州", 95),("九江", 96),
        ("邯郸", 98),("临安", 99),("兰州", 99),("沧州", 100),("临沂", 103),("南充", 104),
        ("天津", 105),("富阳", 106),("泰安", 112),("诸暨", 112),("郑州", 113),("哈尔滨", 114),
        ("聊城", 116),("芜湖", 117),("唐山", 119),("平顶山", 119),("邢台", 119),("德州", 120),
        ("济宁", 120),("荆州", 127),("宜昌", 130),("义乌", 132),("丽水", 133),("洛阳", 134),
        ("秦皇岛", 136),("株洲", 143),("石家庄", 147),("莱芜", 148),("常德", 152),("保定", 153),
        ("湘潭", 154),("金华", 157),("岳阳", 169),("长沙", 175),("衢州", 177),("廊坊", 193),
        ("菏泽", 194),("合肥", 229),("武汉", 273),("大庆", 279)]
    
    geo = Geo(
        "全国主要城市空气质量",
        "data from pm2.5",
        title_color="#fff",
        title_pos="center",
        width=1200,
        height=600,
        background_color="#404a59",
    )
    attr, value = geo.cast(data)
    geo.add(
        "",
        attr,
        value,
        visual_range=[0, 200],
        visual_text_color="#fff",
        symbol_size=15,
        is_visualmap=True,
    )
    geo.render()
    

    在这里插入图片描述

    from pyecharts import Map
    import numpy as np
    
    value = [155, 10, 66, 78, 33, 80, 190, 53, 49.6]
    attr = [
        "福建", "山东", "北京", "上海", "甘肃", "新疆", "河南", "广西", "西藏"
        ]
    
    #  background_color="#404a59"
    map = Map("Map 结合 VisualMap 示例", width=1200, height=600, )
    map.add(
        "",
        attr,
        value,
        maptype="china",
        is_visualmap=True,
        visual_text_color="#000",
    )
    map.render()
    

    在这里插入图片描述

    展开全文
  • 重磅!你们一直催的 PyEcharts教程来啦

    万次阅读 多人点赞 2019-05-28 05:13:54
    作者 |王圣元来源 | 王的机器(ID:MeanMachine1031)看PyEcharts名字就猜得到PyEcharts=Python+EchartsEc...
        

    640?wx_fmt=png


    作者 | 王圣元

    来源 | 王的机器(ID:MeanMachine1031)


    看 PyEcharts 名字就猜得到


    PyEcharts = Python Echarts


    Echarts 是一个由百度开源的数据可视化工具,凭借着良好的交互性,精巧的图表设计,得到了众多开发者的认可,而 Python 就不用多说了。


    当 Python 遇到了 Echarts,就变成了 PyEcharts


    本帖需要的其他库如下:

    import numpy as np	
    import pandas as pd	
    import matplotlib as mpl	
    import matplotlib.pyplot as plt	
    import matplotlib.patches as patches	
    %matplotlib inline	
    from datetime import datetime


    Matplotlib 需要的画图颜色设置如下,这也是 PyEcharts 默认的调色。


    r_hex = '#dc2624'     # red,       RGB = 220,38,36	
    dt_hex = '#2b4750'    # dark teal, RGB = 43,71,80	
    tl_hex = '#45a0a2'    # teal,      RGB = 69,160,162	
    r1_hex = '#e87a59'    # red,       RGB = 232,122,89	
    tl1_hex = '#7dcaa9'   # teal,      RGB = 125,202,169	
    g_hex = '#649E7D'     # green,     RGB = 100,158,125	
    o_hex = '#dc8018'     # orange,    RGB = 220,128,24	
    tn_hex = '#C89F91'    # tan,       RGB = 200,159,145	
    g50_hex = '#6c6d6c'   # grey-50,   RGB = 108,109,108	
    bg_hex = '#4f6268'    # blue grey, RGB = 79,98,104	
    g25_hex = '#c7cccf'   # grey-25,   RGB = 199,204,207


    画图有了 Matplotlib 和 Seaborn 为什么还要学 PyEcharts,看完下面它们的对比图就知道了。


    下面两图画出 USDCNY 从 2016-01-01 到 2019-05-13 的 K 线图。


    知识点:K 线图


    K 线又称蜡烛图,阴阳线。原来是日本米商用于记录米市中的行情波动的,后因其表示价格趋势的方法直观,真实,逐渐成为使用最广泛的技术图形。图像如下:


    640?wx_fmt=png


    颜色不是最重要的,看 A 股的 K 线记住是「红涨绿跌」,看美股的 K 线记住是「绿涨红跌」。


    重要的是 K 线是由很多「蜡烛」状的单元责成,每个单位包含四个数据:即开盘价、最高价、最低价、收盘价。所有的 K 线都是围绕这四个数据展开,反映大势的状况和价格信息。


    先看用 Matplotlib 画的 K 线图,密密麻麻啥都看不清楚,根本区分不了开盘价、最高价、最低价、收盘价


    640?wx_fmt=png


    再看用 PyEcharts 画的 K 线图 (gif),也是密密麻麻的,但是注意到下方可伸缩的时间轴没?通过滑动鼠标我们可以锁定想看到的数据,比如那根大蓝柱 (数据来源是 yahoofinancial,但我查了查在 2016-12-07,USDCNY 日内最高价没有到过 7.49,估计数据源有错)。


    640?wx_fmt=gif


    除了操作滑动轴以外,上图 (左上方图例) 还可以任意显示或隐藏 K 线 (K-Line), 最高价 (high) 和最低价 (low)。


    这种交互式 (interactive) 操作在我看来给图标增加了额外的维度,再反观 Matplotlib 绘制出来的 K 线图 (包含长时间历史数据图) 就像死水一潭。


    你更喜欢哪个?选 Matplotlib 的可以轻轻点右上角,选 PyEcharts 的一起继续前行。


    注:在公众号对话框输入 data 可下载数据和所有美如画的动态图。


    本文思路也很简单,第一章来 PK 两者,PyEcharts 很自然地把 Matplotlib 比下去;第二章就看看胜者 PyEcharts 如何画多图。


    本帖并不是 PyEcharts 的工具书,把里面所有类型的图都讲一遍,那些官方例子都有了。本帖还是结合金融数据,介绍几个最简单的交易策略,并用 PyEcharts 画图。


    首先下载计算技术指标 (technical indicator) 的包 talib,和 PyEcharts 包 pyecharts。在 Anaconda 命令框里两句话搞定。

    conda install -c masdeseiscaracteres ta-lib	
    pip install pyecharts

    引入 talib 并起个别名 ta。

    import talib as ta

    本帖画图需要 pyecharts  里的几个原件:


    • Line 用来画线

    • Kline 用来画 K 线

    • Pie 用来画饼

    • Grid 用来画多个坐标系

    • Overlap 用来叠加不同对象 (比如 Line 和 Kline)

    • Timeline 用来画时间轴轮播图

    • WordCloud 主要展示词云图


    从 pyecharts  中引用它们

    from pyecharts import Line, Kline, Pie, 	
                          Grid, Overlap, Timeline, 	
                          WordCloud

    本帖目录如下:


    目录


    第一章 - Matplotlib Vs PyEcharts

        1.1 K 线图

        1.2 移动均线图

        1.3 布林带图

        1.4 相对强弱指标图


    第二章 - PyEcharts 多图

        2.1 网格图

        2.2 时间线轮播图


    总结


    640?wx_fmt=png


    1 Matplotlib Vs PyEcharts


    1.1 K 线图


    注:本节和 1.2, 1.3 都用以下方式来下载和处理数据。


    数据


    首先用 YahooFinancials API 来下载若干外汇和加密货币的三年半历史数据,安装该 API 用一行代码:


    pip install yahoofinancials


    数据的描述如下


    • 起始日:2016-01-01

    • 终止日:2019-05-13

    • 四个外汇:欧元美元、美元日元、美元人民币,英镑美元

    • 三个加密货币:比特币、以太币、瑞波币


    其中


    • 货币用的不是市场常见格式,比如「欧元美元」用 EURUSD=X,而不是 EURUSD,而「美元日元」用 JPY=X 而不是 USDJPY


    • 加密货币都是以美元计价,用的格式是「比特币」用 BTC-USD,「以太币」用 ETH-USD,「瑞波币」用 XRP-USD


    下面代码就是从 API 获取数据:


    640?wx_fmt=png


    该 API 返回结果 FX_daily 和 CFX_daily 是「字典」格式,样子非常丑陋,感受一下。


    640?wx_fmt=png

    640?wx_fmt=png


    数据样子虽丑,但还满齐全,画 K 线需要的开盘价 (open)、最高价 (high)、最低价 (low)、收盘价 (close) 都有。将上面的「原始数据」转换成 DataFrame,代码如下:


    640?wx_fmt=png


    第 3 行完全是为了 YahooFinancial 里面的输入格式准备的。如果 Asset 是加密货币,直接用其股票代码;如果 Asset 是汇率,一般参数写成 EURUSD 或 USDJPY


    • 如果是 EURUSD,转换成 EURUSD=X

    • 如果是 USDJPY,转换成 JPY=X


    第 6 行定义好开盘价、收盘价、最低价和最高价的标签。


    第 7 行获取出一个「字典」格式的数据。


    第 8, 9 行用列表解析式 (list comprehension) 将日期和价格获取出来。


    第 11 到 13 行定义一个 DataFrame


    • 值为第 9 行得到的 price 列表

    • 行标签为第 8 行得到的 index 列表

    • 列标签为第 6 行定义好的 columns 列表


    处理过后的数据格式美如画,看看 USDCNY。

    curr = 'USDCNY'	
    data = data_converter( FX_daily, curr, 'FX' )	
    data.head(3).append(data.tail(3))


    640?wx_fmt=png


    数据整理好后,来看看 Matplotlib 和 PyEcharts 的 PK 吧。


    Matplotlib 图


    Matplotlib 里面没有直接画 K 线的方法,我们用里面的块 (patch) 对象,对其填充上色,空心红色代表阳线,实心深青色代表阴线,画出来的效果图如下。


    640?wx_fmt=png


    实现上图的代码 (横屏看) 如下:


    640?wx_fmt=png


    第 3-6 行设置了图的大小、dpi、坐标系、标题和 x 轴范围。


    第 8-17 行是核心


    第 8-9 行:对每一个数据,获取出开盘价 (open)、收盘价 (close)、最高价 (high)、最低价 (low)。


    第 11-14 行:如果收盘价 > 开盘价 (阳线)


    • 用 add_patch 方法加一个空心红色块 (patches.Rectangle),确定红块的左下点 x-y 坐标 (i-0,2, open),宽为 0.4,高为 close 和 open 之差。此外 fill 设为 False 就是画个空心矩形。


    • 用 plot 方法加两条线,横坐标都是 i,第一条线纵坐标从 low 到 open,第一条线纵坐标从 close 到 high。


    640?wx_fmt=png


    第 15-17 行:如果收盘价 < 开盘价 (阴线)


    • 用 add_patch 方法加一个实心深青色块 (patches.Rectangle),确定深青块的左下点 x-y 坐标 (i-0,2, close),宽为 0.4,高为 open 和 close 之差。此外 fill 设为 True 就是画个实心矩形。


    • 用 plot 方法加一条线,横坐标都是 i,纵坐标从 low 到 high (为什么画一条线呢?矩形是实心的啊)


    640?wx_fmt=png


    第 19-20 行设置了 x 轴刻度以及标签,并把日期标签旋转 90 度,以免标签相互重叠。


    mpl_Kline( curr, data );


    640?wx_fmt=png


    看到这图第一印象是什么?640? 一样对吗?三年半的数据密密麻麻画出的 K 线看不出任何 K 线应带的信息。如果能在横轴上任意拉伸就好了,这样就可以看清楚细节了。


    Matplotlib 是无能为力了,PyEcharts 闪亮登场。


    PyEcharts 图


    PyEcharts 里画 K 线用到 Kline 对象,除此之外我们添加最高价和最低价两条线 Line 对象,再用 Overlap 对象来「叠加」它们。


    640?wx_fmt=png


    第 1-2 行获取日期和汇率。


    第 4 行创建 K 线对象 Kline,设置好标题 "xxx Chart" 和位置 center。第 5-6 行在 Kline 上添加属性


    • 图例: 'K-Line',

    • x 坐标轴数据:日期

    • y 坐标轴数据:一定要按 [开盘值, 收盘值, 最低值, 最高值] 的顺序,之前处理数据特意按这个顺序设定 DataFrame 的列标签的

    • x 坐标轴可拉伸:True

    • 图例位置:右边

    • 图例排序:竖直

    • 图例文字大小:10


    第 8 行创建折线对象 Line。第 9-13 行在 Line 上添加两条折线,一条是最高价,一条是最低价。


    第 14 行创建叠加对象 Overlap。第 15-16 行在 Overlap 上分别添加之前的 Kline 和 Line,这样就把所有对象整合在一起了。


    第 17 行如果被运行,该动态图被生成到 USDCNY Chart.html 网页文件里;如果没被运行,该动态图将显示在 Jupyter Notebook 中。


    640?wx_fmt=gif


    本例用到了 pyecharts 中的三个原件:Kline,Line 和 Overlap。它们的用法都是先创建 (可以带些必要属性,比如标题和尺寸),再用 add 方法添加额外属性。将其流程通用化得到


        object = Object( 必要属性 )

        object.add( 额外属性 )


    如果你看懂了以上内容,你可以学会了 PyEcharts。接下来的所有例子都万变不离其宗。在后三节中,我准备用 PyEcharts 画出三个最常见的交易策略要看的指标图,分别是


    • 1.2 节的移动均线图 (Moving Average, MA)

    • 1.3 节的布林带 (Bollinger Band, BBand)

    • 1.4 节的相对强弱指标 (Relative Strength Index, RSI)


    MA, BBand 和 RSI 是量化交易常用的技术指标,通常我们用 talib 包里的函数直接计算。


    1.2 移动均线图


    知识点:移动均线

    移动均线 (Moving Average, MA) 是将一段时间 (也叫窗口) 内资产收盘价的平均价格连成曲线,用以显示价格趋势的一种技术指标。

    平均有不同定义,最常见的是简单移动平均 (Simple Moving Average, SMA),平均值是算术平均值,有时我们也用 MA 代表 SMA。其他常见的还有

    • 指数移动平均 (Exponential Moving Average, EMA)

    • 加权移动平均 (Weighted Moving Average, WMA)

    • 双指数移动平均 (Double Exponential Moving Average, DEMA)

    • 三动态移动平均 (Triple Exponential Moving Average, TEMA)

    还有一些少见的 TRIMA, KAMA 和 MAMA。公式就不写了,知道它们是一种计算均值的方法就行。

    窗口可以自行选择,常见的有 5日、10日、20日、30日、60日等。

    移动指的是窗口不停移动,假如一年有 252 个交易日,那么第 1 个 MA60 值需要第 1 到 60 个汇率,第 2 个 MA60 值需要第 2 到 61 个汇率,第 193 个 MA60 值需要第 193 到 252 个汇率。最终只有 193 个 MA60。同理可得到只有 223 个 MA20。


    利用均值指标,最常见的交易策略就是「双均线策略」。

    双均线策略:MA60 和 MA20 必有交点,若 20 天平均线「上穿越」60 天均线,则为买入点;反之为卖出点。该策略基于不同天数均线的交叉点抓住价格的强势和弱势时刻进行交易。


    下面我们来看看两种类型的移动平均图:


    1. 不同窗口的简单移动平均 (MA)

    2. 相同窗口的各式移动平均 (XMA)


    不同窗口的 MA

    我们以比特币 (代码 BTC-USD) 举例来绘图。


    label = 'BTC-USD'	
    data = data_converter( CFX_daily, label, 'CFX' )	
    data.head(3).append(data.tail(3))


    640?wx_fmt=png


    数据整理好后,来看看 Matplotlib 和 PyEcharts 的 PK 吧。


    Matplotlib 图


    640?wx_fmt=png


    第 1 行定义函数,label 和 data 是「位置参数」,window_periods 是「可变参数」。


    第 3-6 行设置了图的大小、dpi、坐标系、标题和 x 轴范围。


    第 8-10 行画出收盘价的折线图。


    第 12-14 行遍历 window_periods 里所有值,用 talib 里的 ta.MA 函数计算不同窗口的 MA 值,再画出其折线图。


    第 15 行把图例放在图的最佳位置 (loc=0)。


    画出窗口为 30日、60日和 100日的简单移动平均线 (SMA) 看看。


    mpl_MA( label, data, 30, 60, 100 );


    640?wx_fmt=png


    只要历史数据一多就是 Matplotlib 的死穴,只能大概看得出价格走势,但却丢失很多细节。


    PyEcharts 图


    PyEcharts 里用 n 条线 Line 对象画移动平均图,并用 Overlap 对象来「叠加」它们。PyEcharts 里的代码比 Matplotlib 里的简洁多了。


    640?wx_fmt=png


    第 1-2 行获取日期和比特币价格。


    第 4 行创建折线对象 Line,起名为 line。设置好标题 "xxx Chart" 和位置 center。第 5-6 行在 Line 上添加属性


    • 图例: 'Close'

    • x 坐标轴数据:日期

    • y 坐标轴数据:比特币价格

    • x 坐标轴可拉伸:True

    • 图例位置:右边

    • 图例排序:竖直

    • 图例文字大小:10


    第 8 行创建另一个折线对象 Line,起名叫 line2。


    第 11-13 行在 line2 上添加 n 条折线,即不同窗口的移动平均线。


    第 15 行创建叠加对象 Overlap。第 16-17 行在 Overlap 上分别添加之前的「收盘价折线」和「n 条移动平均线」,这样就把所有对象整合在一起了。


    第 18 行如果被运行,该动态图被生成到 BTCUSD Chart.html 网页文件里;如果没被运行,该动态图将显示在 Jupyter Notebook 中。


    640?wx_fmt=gif


    在动态图中,你可以一次性画出很多窗口下的 MA 线,在点击图例看你感兴趣的做双均值策略 (上例看的是 MA30 和 MA60)。试想这如果在 Matplotlib 里实现不是要画很多图?


    比特币在 2017 年底到达最高点,差不多 20000 美元,之后一路狂泻。近期又起来了,原因是被当成像黄金一样的避险资产了。。。


    不同类型的 MA


    我们以以太币 (代码 ETH-USD) 举例来绘图。

    label = 'ETH-USD'	
    data = data_converter( CFX_daily, label, 'CFX' )	
    data.head(3).append(data.tail(3))


    640?wx_fmt=png


    数据整理好后,来看看 Matplotlib 和 PyEcharts 的 PK 吧。


    Matplotlib 图


    640?wx_fmt=png


    将移动平均的类型由字符型转成整数型,方便 ta.MA 函数使用。


    640?wx_fmt=png


    第 1 行定义函数,label 和 data 是「位置参数」,wp 是「默认参数」而默认值为 5,MA_type 是「可变参数」。


    第 3-6 行设置了图的大小、dpi、坐标系、标题和 x 轴范围。


    第 8-9 行画出收盘价的折线图。


    第 11-14 行遍历 MA_type 里所有值,用 talib 里的 ta.MA 函数计算窗口为 wp的不同类型 MA 值,再画出其折线图。


    第 16 行把图例放在图的最佳位置 (loc=0)。


    画出窗口为 100日的 8 种移动平均线看看。


    mpl_XMA( label, data, 100, 	
            'SMA','EMA','WMA','DEMA',	
            'TEMA','TRIMA','KAMA','MAMA' );


    640?wx_fmt=png


    这效果啥也不说了,还是看 PyEcharts 的作品吧。


    PyEcharts 图


    PyEcharts 里还是用 n 条线 Line 对象画移动平均图,并用 Overlap 对象来「叠加」它们。


    640?wx_fmt=png


    第 1-2 行获取日期和以太币价格。


    第 4 行创建折线对象 Line,起名为 line。设置好标题 "xxx Chart" 和位置 center。第 5-6 行在 Line 上添加属性


    • 图例: 'Close'

    • x 坐标轴数据:日期

    • y 坐标轴数据:比特币价格

    • x 坐标轴可拉伸:True

    • 图例位置:右边

    • 图例排序:竖直

    • 图例文字大小:10


    第 8 行创建另一个折线对象 Line,起名叫 line2。


    第 9-10 行设定好窗口 100 日,和 8 种移动平均类型的字符列表。


    第 12-15 行在 line2 上添加 8 条折线,即 8 种类型的移动平均线。


    第 17 行创建叠加对象 Overlap。第 18-19 行在 Overlap 上分别添加之前的「收盘价折线」和「8 条移动平均线」,这样就把所有对象整合在一起了。


    第 20 行如果被运行,该动态图被生成到 ETHUSD Chart.html 网页文件里;如果没被运行,该动态图将显示在 Jupyter Notebook 中。


    640?wx_fmt=gif


    这横轴伸缩效果,这图例显示/隐藏效果,是不是和 Matplotlib 没得比。


    1.3 布林带图


    数据


    注:本节和 1.4, 2.1, 2.2 都使用从 csv 里读取的股票数据。


    本节使用的数据描述如下:


    • 5 只股票:AAPL, JD, BABA, FB, GS

    • 1 年时期:从 2018-02-26 到 2019-02-26


    data = pd.read_csv( '1Y Stock Data.csv', 	
                         parse_dates=[0],	
                         dayfirst=True )	
    data.head().append(data.tail())


    640?wx_fmt=png


    上小节介绍了移动均值,这小节介绍另一个技术指标 - 布林线。


    知识点:布林线


    布林线 (Bollinger Line) 原理是,价格总是围绕某个中轴在一定的范围内波动,这个范围就形成了一个带状区间 (band)。


    价格就在这个区间的上限和下限之间进行波动。而这条带状区间的宽窄也会随着价格波动幅度的大小而变化。


    • 价格涨跌幅度加大时,带状区变宽。

    • 价格涨跌幅度变小时,带状区变窄。


    640?wx_fmt=png


    布林线由三条曲线组成,分别是上轨线 (upper band)、中轨线 (mid band) 和下轨线 (lower band)。上图只画出上轨线和下轨线。


    根据布林线指标的交易策略如下。


    观察两点:


    1. 价格和三轨线关系

    2. 上轨线和下轨线形成的带状口


    一般来说,下轨对价格有支撑作用,上轨对价格有阻力作用,中轨对价格既有支撑也有阻力作用。


    • 当价格穿越上轨 (冲破阻力了),买入

    • 当价格穿越下轨 (冲破支撑了),卖出

    • 当价格由下向上穿越中轨,买入

    • 当价格由下向上穿越中轨,卖出


    此外,要结合带状口的开合,如果出现极度收缩的带状口时,如果价格开始抬升,带状口重新扩张的时候,买入。


    了解好布林带后,来看看 Matplotlib 和 PyEcharts 的 PK 吧。


    Matplotlib 图


    640?wx_fmt=png


    第 1 行定义函数,code 和 data 是「位置参数」,wp 是「默认参数」而默认值为 5,MAtype 是「可变参数」。忘了这些参数类型的可回顾〖Python 入门篇 (下)〗。


    第 3 行根据 code 获取股票信息。


    第 5-8 行设置了图的大小、dpi、坐标系、标题和 x 轴范围。


    第 10-23 行在 1.1 节画 K 线图解释的很清楚了。


    第 27 行用 talib 里的 ta.BBANDS 函数计算上轨线、中轨线和下轨线。在本例中设定 5 日 EMA,2 倍的波动率水平。即 


    • 上轨线 = 5 日 EMA + (5 日价格波动率 x 2)

    • 中轨线 = 5 日 EMA

    • 下轨线 = 5 日 EMA - (5 日价格波动率 x 2)


    第 29-33 行创建第二个坐标系,把三轨线叠加到 K 线上,图例放在图的最佳位置 (loc=0)。


    运行程序看看苹果股票的布林带。


    mpl_BBAND( 'AAPL', data, MAtype='EMA' ); 


    640?wx_fmt=png


    不吐槽了。。。


    PyEcharts 图


    PyEcharts 里画 K 线用到 Kline 对象,再用 Line 对象画上轨线、中轨线和下轨线,最后 Overlap 对象来「叠加」它们。


    640?wx_fmt=png


    代码很简单,用的原件 Kline, Line 和 Overlap 之前都解释过了,自己看问题不大。


    640?wx_fmt=gif


    效果好到爆有没有?


    1.4 相对强弱指标图


    这小节介绍最后一个技术指标 - 相对强弱指标。


    知识点:相对强弱指标

    相对强弱指数 (Relative Strength Index, RSI) 是通过特定时期价格变动情况计算市场买卖力量对比,来判断价格内部本质强弱、推测价格未来的变动方向。


    RSI 的计算公式如下 (RSI 是一个 0 到 100 的数)


        RSI = 100 - 100/(1+a)

        a = 平均收益 / |平均损失|


    计算平均损益通常用 14 天的历史数据。


    根据相对强弱指标的交易策略如下。

    RSI 是个趋势指标,通常来讲


    • 当 RSI < 30 (超卖了),可考虑买入

    • 当 RSI > 70 (超买了),可考虑卖出


    640?wx_fmt=png


    来看看 Matplotlib 和 PyEcharts 的 PK 吧。


    Matplotlib 图


    640?wx_fmt=png


    第 1 行定义函数,code 和 data 是「位置参数」,wp 是「默认参数」而默认值为 5。忘了这些参数类型的可回顾〖Python 入门篇 (下)〗。


    第 3 行根据 code 获取股票信息。


    第 5-8 行设置了图的大小、dpi、坐标系、标题和 x 轴范围。


    第 10-23 行在 1.1 节画 K 线图解释的很清楚了。


    第 25 行用 talib 里的 ta.RSI 函数计算 RSI 值。在本例中设定 14 日历史窗口。


    第 27-31 行创建第二个坐标系,把 RSI 线、支撑线 (30)、阻力线 (70) 叠加到 K 线上,图例放在图的最佳位置 (loc=0)。


    运行程序看看高盛股票的 RSI。

    mpl_BBAND( 'AAPL', data, MAtype='EMA' ); 


    640?wx_fmt=png


    RSI 突破 30 -70 的点还是能看清楚的,但看完 PyEcharts 画的图再作评价。


    PyEcharts 图


    PyEcharts 里画 K 线用到 Kline 对象,再用 Line 对象画 RSI 线、支撑线和阻力线,最后 Overlap 对象来「叠加」它们。


    640?wx_fmt=png


    代码很简单,用的原件 Kline, Line 和 Overlap 之前都解释过了,自己看问题不大。


    640?wx_fmt=gif


    把 K 线去掉,看 RSI 是否突破支撑线或阻力线特别清楚。


    2 PyEcharts 多图


    2.1 网格 (Grid) 图


    数据


    本小节用上节用到的 5 个股票数据,再加上标准普尔 500 指数 (SPX),和恐慌指数 (VIX)。数据如下:


    stock_data = pd.read_csv( '1Y Stock Data.csv', 	
                               parse_dates=[0],	
                               dayfirst=True )	
    stock_data.head().append(stock_data.tail())


    640?wx_fmt=png


    data = pd.read_csv( 'S&P500.csv', 	
                         index_col=0,	
                         parse_dates=True,	
                         dayfirst=True )	
    spx = data[['Adj Close']].loc['2018-02-26':'2019-02-26']	
    spx.head(3).append(spx.tail(3))


    640?wx_fmt=png


    data = pd.read_csv( 'VIX.csv', 	
                         index_col=0,	
                         parse_dates=True,	
                         dayfirst=True )	
    vix = data[['Adj Close']].loc['2018-02-26':'2019-02-26']	
    vix.head(3).append(vix.tail(3))


    640?wx_fmt=png


    我们想把苹果股票的 K 线图,和 SPX 和 VIX 折线图放在一起看。如果再用 Overlap 来叠加它们会显得图很乱,这时可以借用 pyecharts 里的 Grid 对象,它是将上面三个图放在三个坐标系中。


    代码如下:


    640?wx_fmt=png


    第 1-5 行用 code 获取股票数据,并获取日期和价格。为了画 K 线,价格数组的列必须按 pyecharts 里 API 要求的顺序 - [开盘价, 收盘价, 最低价, 最高价]。


    第 6 -7 行创建 Kline 对象 (标题放左边),并添加 x 轴数据、y 轴数据和“允许横轴拉伸”。


    第 10 -12 行创建 Line允许横轴拉伸。最关键的是 datazoom_xaxis_index=[2,1,0],就说伸缩功能控制三个轴,AAPL 一个,SPX 一个,VIX 一个。这样拉伸 x 轴三幅子图可以同时动,非常酷!


    第 15 -18 行创建 Line 对象 (标题为 VIX,位置离顶 75%) 并起名为 line2,再添加若干属性。


    第 20 行创建 Grid 对象,宽 1000,高 600 (这些数值是不断尝试看效果设置的)。


    第 20-23 行将三幅图加在 Grid 中,关键点是如何设置里面的 grid_top 和 grid_bottom 里的百分数而使得图看起来好看,这个没有标准的,不停地尝试到你最终满意为止。本例中 AAPL 占了 5% 到 50% 的位置,SPX 占了 55% 到 70% 的位置,VIX 占了 75% 到 90% 的位置 (还有 10% 位置留给了拉缩轴)。


    第 24 行如果被运行,该动态图被生成到 APPL&VIX.html 网页文件里;如果没被运行,该动态图将显示在 Jupyter Notebook 中。



    640?wx_fmt=gif


    惊不惊喜?意不意外?炫不炫酷?从图上可以看到在 2018 年底 SPX 和 VIX 同时到达最低点和最高点,对应的苹果 K 线看,在那一点前后苹果股价有一个大跌和大涨。


    2.2 时间线轮播图


    本节想画出不同时点 (每月月底) 时五支股票 (苹果、阿里巴巴、京东、脸书和高盛) 交易额 (价格×交易量) 的成分图。


    如果用 Matplotlib,是不是要画 n 张饼状图 (pie chart),其中 n 为月份个数?但是用 PyEcharts 里面的 Timeline 神器,可画出随时间线轮播动态图。一图包含 n 张饼状图。


    由于我们需要每个股票在每个月底的数据,原来讲的 pandas 里的 split-apply-combine 的方法可以派上用场了。


    数据


    stock_data 还是之前用的含有 5 只股票完整信息的 DataFrame,下列代码做


    1. 只保留 'Date', 'Symbol', 'Adj Close' 和 ‘Volume‘,最后两列是股票的收盘价和交易量 (用于计算交易额)


    2. 从 ‘Date’ 中获取 ‘Year’ 和 ‘Month’ 的信息并插入表中,用于根据年份和月份来分组。


    data = stock_data[['Date', 'Symbol', 'Adj Close', 'Volume']]	
    data.insert( 1, 'Year', pd.DatetimeIndex(data['Date']).year )	
    data.insert( 2, 'Month', pd.DatetimeIndex(data['Date']).month )	
    data.head(3).append(data.tail(3))


    640?wx_fmt=png


    接下来定义个 print_groups 函数便于打印组的名字和前五行信息。


    def print_groups( group_obj ):	
        for name, group in group_obj:	
            print( name )	
            print( group.head() )	
    	
    grouped = data.groupby(['Symbol', 'Year', 'Month'])	
    print_groups(grouped)  


    640?wx_fmt=png


    对分好的组想进行什么操作可以用高阶函数 apply() 来实现。比如想获取月底的数据,那么就对每个组 df 获取最后一行,用匿名函数


        lambda df: df.iloc[-1,:]


    显示结果 group 的头和尾部三行。


    group = grouped.apply( lambda df: df.iloc[-1,:] )	
    group.head(3).append(group.tail(3))


    640?wx_fmt=png


    按 Symbol, Year 和 Month 获取出来了每个月底的 Adj Close 和 Volume。


    绘图


    接着就可以用 Timeline 来画轮播图了。


    640?wx_fmt=png


    第 1-2 行获取 5 个股票代号,并且存储股票个数。


    第 4 行计算交易额,即收盘价和交易量的乘积。


    第 5 行将一维的交易额数组重塑成二维数组,每一行代表一个股票的月末交易额数据。第 6 行获取日期。


    第 7-8 行创建 Timeline 对象,允许自动播放,时间线放在底部,宽 800,高 400。


    第 11-15 行遍历每个日期,即在每个月末做三件事


    1. 创建一个 Pie 对象,设置标题、背景、以及标题位置。


    2. 在 Pie 上添加属性名称 (股票代号)、属性对应值 (交易额)、展示标签 (是)、饼半径 (内半径 30 外半径 60 因此是个空心饼状图)、图例位置 (右)、图例排序 (竖直)。


    3. 在 Timeline 上添加 Pie 和日期。


    第 18 行如果被运行,该动态图被生成到 Pie.html 网页文件里;如果没被运行,该动态图将显示在 Jupyter Notebook 中。


    640?wx_fmt=gif


    自己看展示吧,要多酷就多酷。


    3 总结


    如果我说在写这篇之前,我也没使用过 PyEcharts 你们信么?真的我也没用过,但是我通过看官网介绍而系统总结一套方法很快就学会它了:

    方法总结


    对 pyecharts 中的所有原件,都是先创建 (可以带些必要属性,比如标题和尺寸),再用 add 方法添加额外属性。其通用化流程为


        object = Object( 必要属性 )

        object.add( 额外属性 )


    在画图之前,你应该对那些原件可以干嘛有个大概印象,比如 Kline 是画 K 线图,Heatmap 是画热力图,WordCloud 是图词云图等等。对于那些装饰原件所需的必要属性和额外属性,上官网一查便知,跟着例子看理解更快。


    画多个坐标系用 Grid 对象;叠加多个原件用 Overlap 对象;随着时间轴展示不同时点的数据关系用 Timeline 对象,等等。


    你不需要精通每个细节,要用什么直接去官网查找资料或者搜索正确的问题就行了。


    到现在,常规的 Python 知识点都讲完了,你已经可以用它来做数值计算 (numpy)、数据分析 (pandas)、优化插值 (scipy)、绘制美图 (matplotlib, seaborn) 甚至可以装13 (pyecharts) 了。


    原文链接:

    https://mp.weixin.qq.com/s/AU-IEEQvmBxBZ7GBZIZwBA

    (*本文仅代表作者观点,转载请联系原作者)



    CTA核心技术及应用峰会


    5月25-27日,由中国IT社区CSDN与数字经济人才发展中心联合主办的第一届CTA核心技术及应用峰会将在杭州国际博览中心隆重召开,峰会将围绕人工智能领域,邀请技术领航者,与开发者共同探讨机器学习和知识图谱的前沿研究及应用。议程设置请请识别海报二维码查看。


    目前CTA峰会倒计时 天!还没有拿到入场券的小伙伴可以识别海报二维码,即刻抢购。你也添加小助手微信15101014297,备注“CTA”,了解票务以及会务详情。


    640?wx_fmt=jpeg

    点击阅读原文,了解CTA核心技术及应用峰会

    展开全文
  • Python_pyecharts

    2019-02-23 11:49:46
    pyecharts 是一个用于生成 Echarts 图表的类库。Echarts 是百度开源的一个数据可视化 JS 库。用 Echarts 生成的图可视化效果非常棒,pyecharts 是为了与 Python 进行对接,方便在 Python 中直接使用数据生成图。 ...
  • 本系列(pyecharts进阶用法)将给大家介绍和讲解一些pyecharts里的细节问题,让大家能将数据分析和可视化更好的结合,同时也给用户更 好的视觉体验。 ​欢迎关注微信公众号:简说Python 账号:xksnh888 关注回复...
  • PyEcharts——python学习笔记

    千次阅读 2018-12-04 09:02:50
    安装PyEcharts 命令行内输入 pip install pyecharts 等待安装完成 安装 pyecharts_snapshot(自选) 如果想直接将图片保存为 png, pdf, gif 格式的文件,可以使用 pyecharts-snapshot。 pip 安装 pip ...
  • pyecharts 是一个用于生成 Echarts 图表的类库。Echarts 是百度开源的一个数据可视化 JS 库。用 Echarts 生成的图可视化效果非常棒,为了与 Python 进行对接,方便在 Python 中直接使用数据生成图,我写了这个项目。...
  • pyecharts学习笔记

    万次阅读 多人点赞 2018-10-30 17:44:01
    echarts是百度可视化工具,图形的可视化效果很好,pyecharts是利用python实现生成echarts图表的类目,功能非常强大,用了之后瞬间被圈粉了,以下为学习笔记 中文官方文档:点击打开链接 1.基本语法学习 from ...
  • python使用pyecharts绘制地图

    万次阅读 2019-08-24 23:12:08
    一.查看数据 import pandas as pd data=pd.read_csv('test_datasets_finally.csv',delimiter='#',header=0) df=pd.DataFrame(data) print(df.shape) print(df.loc[:,'area'].nunique())#地区数 ...
  • Python + PyEcharts——数据可视化

    万次阅读 多人点赞 2018-07-05 15:34:06
    一、第一个PyEcharts图标 1 安装:&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;nbsp;&...
  • python的pyecharts绘制各种图表详细(代码)

    万次阅读 多人点赞 2018-04-17 21:15:13
    环境:pyecharts库,echarts-countries-pypkg,echarts-china-provinces-pypkg,echarts-china-cities-pypkg 数据:2018年4月16号的全国各地最高最低和天气类型的数据——2018-4-16.json(爬虫爬的)代码:天气数据...
  • 最近学习到数据可视化内容,老师推荐安装pyecharts,于是pip install 了一下,结果...掉坑了,下面是我的跳坑经验,如果你有类似问题,希望对你有所帮助。 第一个坑: 这个不难理解,缺少pyecharts-jupyter-installer...
  • Python 离线安装pyecharts模块

    千次阅读 2020-03-05 06:39:43
    我们在做企业项目的时候,进行数据可视化,需要用到pyecharts模块。但是一般来说,企业的服务器是不能连接到外网的。所以需要离线安装。这里记录一下几个关键的问题。 步骤 从PyPI网站搜索‘pyecharts’1,找到...
  • 想要开始使用pyecharts,但是在运行第一个例子的时候就报错了。。。。 问题描述 执行 import pyecharts是可以的,但是pyecharts下面的模块就报错(如图一)。 在交互环境下运行竟然是OK的(如图二)。 cmd中直接...
  • 发现文件的命名是pyecharts.py 改了文件名后运行正常 总结下pyecharts错误常规解决办法 1、版本问题,请将python升级到3.6以上(pyecharts V0.5.x 不再更新) 确实需要低版本,请手动指定版本,如 pip install ...
  • 使用pyecharts输出图片

    千次阅读 2019-05-15 12:08:56
    最近想用pyecharts画节点之间的关系图,看了pyecharts官网上的关系图示例后就开始迫不及待的跑demo了,但发现demo的输出是html文件,而我需要将关系图批量的输出为图片,于是就开始各种查资料,找pyecharts输出为...
  • pyecharts是一个百度做的数据可视化模块,做好的echarts图可以存为...因为最近自己有这样的可视化需求,所以用到了pyecharts这个模块,现在将一路上积累到的经验分享给大家。 地图可视化:地图包 pyecharts...
  • 目录一、Pyecharts 认识(一)对 Pyecharts 认识(二)安装:二、Pyecharts 图表绘制(一)Pyecharts 绘制图表理解1、全局配置项2、系列配置项3、注意:数据格式(二)图表绘制1、柱状图2、饼图3、玫瑰图 ...
1 2 3 4 5 ... 20
收藏数 7,442
精华内容 2,976
关键字:

pyecharts