专栏名称: 数据分析1480
积土成山,积水成渊!!定期与大家分享数据分析和挖掘方面的干货,包括分析工具R与Python的使用、数据分析的案例、及最新的数据领域资讯。
目录
相关文章推荐
HACK学习呀  ·  交易实战 | ... ·  昨天  
51好读  ›  专栏  ›  数据分析1480

大赞Pyecharts,教你做动态可视化!

数据分析1480  · 公众号  ·  · 2020-04-06 10:00

正文

前言 基本使用 链式调用 单独调用 全局配置 系列配置 基本图表 饼图 折线图 漏斗图 热力图 日历图 地理图 地理热点图 3D散点图 其他特性 xy轴翻转 组合图表 主题设置 时间轴 可视化分享 航线图 🎈气泡效果散点图

前言

pyecharts 是一个用于生成 Echarts 图表的Python库。Echarts是百度开源的一个数据可视化 JS 库,可以生成一些非常酷炫的图表。

AQI指数

Pyecharts在1.x版本之后迎来重大更新,与老版本(0.5X)已是两个完全不同的版本,所以很多小伙伴在使用Pyecharts出现了类似 'pyecharts' has no attribute 'xxx' 的报错,那是因为你安装了1.x的版本却使用了0.5x的调用方法。
  • 当然如果你更习惯使用0.5X版本的可以通过如下语句来进行安装:
    pip install pyecharts==0.5.11

  • 安装1.x版本( 仅支持Python 3.6+ ):
    pip install pyecharts

本文将会介绍Pyecharts1.x版本的使用方法,本文所有语句均基于 v1.6.2 ,通过以下语句查询使用pyecharts版本:

import pyecharts

print(pyecharts.__version__)

基本使用

链式调用

pyecharts在v1.x之后支持链式调用,具体语句如下:

from pyecharts.charts import Bar
from pyecharts import options as opts

# 示例数据
cate = ['Apple''Huawei''Xiaomi''Oppo''Vivo''Meizu']
data1 = [123153891079823]
data2 = [56779368 4567]
# 1.x版本支持链式调用
bar = (Bar()
       .add_xaxis(cate)
       .add_yaxis('电商渠道', data1)
       .add_yaxis('门店', data2)
       .set_global_opts(title_opts=opts.TitleOpts(title="Bar-基本示例", subtitle="我是副标题"))
      )

bar.render_notebook()

单独调用

不习惯链式调用的开发者依旧可以单独调用方法。

# 单独调用
bar = Bar()
bar.add_xaxis(cate)
bar.add_yaxis('电商渠道', data1)
bar.add_yaxis('门店', data2)
bar.set_global_opts(title_opts=opts.TitleOpts(title="Bar-基本示例", subtitle="我是副标题"))
bar.render_notebook()

全局配置

可以通过全局配置( .set_global_opts() :)控制以下区域


"""
全局配置项使用示例:
1. 标题 & 副标题
2. 不显示图例
"""

bar = (Bar()
       .add_xaxis(cate)
       .add_yaxis('电商渠道', data1)
       .add_yaxis('门店', data2)
       .set_global_opts(title_opts=opts.TitleOpts(title="Bar-基本示例", subtitle="我是副标题"),
                        toolbox_opts=opts.ToolboxOpts(),
                        legend_opts=opts.LegendOpts(is_show=False))
      )

bar.render_notebook()

系列配置

可以通过系列配置( .set_series_opts() )控制图表中的文本,线样式,标记等.

"""
系列配置项使用示例:
1. 不显示数值
2. 标记每个系列的最大值
"""

bar = (Bar()
       .add_xaxis(cate)
       .add_yaxis('电商渠道', data1)
       .add_yaxis('门店', data2)
       .set_series_opts(label_opts=opts.LabelOpts(is_show=False),
                        markpoint_opts=opts.MarkPointOpts(data=[opts.MarkPointItem(type_="max", name="最大值"),]))
       .set_global_opts(title_opts=opts.TitleOpts(title="Bar-基本示例", subtitle="我是副标题"))
      )

bar.render_notebook()

基本图表

饼图

from pyecharts.charts import Pie
from pyecharts import options as opts

# 示例数据
cate = ['Apple''Huawei''Xiaomi''Oppo''Vivo''Meizu']
data = [153124107998946]
pie = (Pie()
       .add('' , [list(z) for z in zip(cate, data)],
            radius=["30%""75%"],
            rosetype="radius")
       .set_global_opts(title_opts=opts.TitleOpts(title="Pie-基本示例", subtitle="我是副标题"))
       .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {d}%"))
      )

pie.render_notebook()

折线图

from pyecharts.charts import Line
from pyecharts import options as opts

# 示例数据
cate = ['Apple''Huawei''Xiaomi''Oppo''Vivo''Meizu']
data1 = [123153891079823]
data2 = [567793684567]
"""
折线图示例:
1. is_smooth 折线 OR 平滑
2. markline_opts 标记线 OR 标记点
"""

line = (Line()
       .add_xaxis(cate)
       .add_yaxis('电商渠道', data1, 
                  markline_opts=opts.MarkLineOpts(data=[opts.MarkLineItem(type_="average")]))
       .add_yaxis('门店', data2, 
                  is_smooth=True
                  markpoint_opts=opts.MarkPointOpts(data=[opts.MarkPointItem(name="自定义标记点"
                                                                             coord=[cate[2], data2[2]], value=data2[2])]))
       .set_global_opts(title_opts=opts.TitleOpts(title="Line-基本示例", subtitle="我是副标题"))
      )

line.render_notebook()

漏斗图

from pyecharts.charts import Funnel
from pyecharts import options as opts

# 示例数据
cate = ['访问''注册''加入购物车''提交订单''付款成功']
data = [30398152301004581095698]
"""
漏斗图示例:
1. sort_控制排序,默认降序;
2. 标签显示位置
"""

funnel = (Funnel()
          .add("用户数", [list(z) for z in zip(cate, data)], 
               sort_='ascending',
               label_opts=opts.LabelOpts(position="inside"))
          .set_global_opts(title_opts=opts.TitleOpts(title="Funnel-基本示例", subtitle="我是副标题"))
         )

funnel.render_notebook()

热力图

from




    
 pyecharts.charts import HeatMap
from pyecharts import options as opts
from pyecharts.faker import Faker
import random

# 示例数据
data = [[i, j, random.randint(050)] for i in range(24for j in range(7)]
heat = (HeatMap()
        .add_xaxis(Faker.clock)
        .add_yaxis("访客数"
                   Faker.week, 
                   data,
                   label_opts=opts.LabelOpts(is_show=True, position="inside"))
        .set_global_opts(
            title_opts=opts.TitleOpts(title="HeatMap-基本示例", subtitle="我是副标题"),
            visualmap_opts=opts.VisualMapOpts(),
            legend_opts=opts.LegendOpts(is_show=False))
       )

heat.render_notebook()

日历图

from pyecharts.charts import Calendar
from pyecharts import options as opts
import random
import datetime

# 示例数据
begin = datetime.date(201911)
end = datetime.date(20191231)
data = [[str(begin + datetime.timedelta(days=i)), random.randint(100025000)]
        for i in range((end - begin).days + 1)]
"""
日历图示例:
"""

calendar = (
        Calendar()
        .add("微信步数", data, calendar_opts=opts.CalendarOpts(range_="2019"))
        .set_global_opts(
            title_opts=opts.TitleOpts(title="Calendar-基本示例", subtitle="我是副标题"),
            legend_opts=opts.LegendOpts(is_show=False),
            visualmap_opts=opts.VisualMapOpts(
                max_=25000,
                min_=1000,
                orient="horizontal",
                is_piecewise=True,
                pos_top="230px",
                pos_left="100px",
            )
        )
    )

calendar.render_notebook()

地理图

from pyecharts import options as opts
from pyecharts.charts import Map
import random

province = ['广东''湖北''湖南''四川''重庆''黑龙江''浙江''山西''河北''安徽''河南''山东''西藏']
data = [(i, random.randint(50150)) for i in  province]
_map = (
        Map()
        .add("销售额", data, "china")
        .set_global_opts(
            title_opts=opts.TitleOpts(title="Map-基本示例"),
            legend_opts=opts.LegendOpts(is_show=False),
            visualmap_opts=opts.VisualMapOpts(max_=200, is_piecewise=True),
        )
    )

_map.render_notebook()

地理热点图

from pyecharts import options as opts
from pyecharts.charts import Geo
from pyecharts.globals import ChartType
import random

province = ['武汉''十堰''鄂州''宜昌''荆州''孝感''黄石''咸宁''仙桃']
data = [(i, random.randint(50150)) for i in province]
geo = (Geo().
        add_schema(maptype="湖北")
        .add("门店数", data,type_=ChartType.HEATMAP)
        .set_series_opts(label_opts=opts.LabelOpts(is_show=False))
        .set_global_opts(
            visualmap_opts=opts.VisualMapOpts(),
            legend_opts=opts.LegendOpts(is_show=False),
            title_opts=opts.TitleOpts(title="Geo-湖北热力地图"))
      )

geo.render_notebook()

3D散点图

from pyecharts import options as opts
from pyecharts.charts import Scatter3D
from pyecharts.faker import Faker
import random


data = [(random.randint(0100), random.randint(0100), random.randint(0100))
        for _ in range(80)]
scatter3D = (Scatter3D()
             .add("", data)
             .set_global_opts(
                 title_opts=opts.TitleOpts("Scatter3D-基本示例"),
                 visualmap_opts=opts.VisualMapOpts(range_color=Faker.visual_color))
            )

scatter3D.render_notebook()

其他特性

xy轴翻转

from pyecharts.charts import Bar
from pyecharts import options as opts

# 示例数据
cate = ['Apple''Huawei''Xiaomi' 'Oppo''Vivo''Meizu']
data1 = [123153891079823]
data2 = [567793684567]
bar = (Bar()
       .add_xaxis(cate)
       .add_yaxis('电商渠道', data1)
       .add_yaxis('门店', data2)
       .set_global_opts(title_opts=opts.TitleOpts(title="XY轴翻转-基本示例", subtitle="我是副标题"))
       .set_series_opts(label_opts=opts.LabelOpts(is_show=False))
       .reversal_axis()
      )

bar.render_notebook()

组合图表

from pyecharts import options as opts
from pyecharts.charts import Map, Bar, Grid
from pyecharts.globals import ChartType, ThemeType
import random

province = ['武汉''十堰''鄂州''宜昌''荆州''孝感''黄石''咸宁''仙桃']
data = [324125145216241244156278169]
bar = (Bar()
       .add_xaxis(province)
       .add_yaxis('营业额', data)
       .set_series_opts(label_opts=opts.LabelOpts(is_show=False))
       .set_global_opts(
            title_opts=opts.TitleOpts(title="Grid-Bar")
        )
      )

line = (Line()
       .add_xaxis(province)
       .add_yaxis('营业额', data, 
                  markline_opts=opts.MarkLineOpts(data=[opts.MarkLineItem(type_="average")]))
       .set_global_opts(title_opts=opts.TitleOpts(title="Grid-Line", pos_top="48%"))
      )

grid = (
        Grid()
        .add(bar, grid_opts=opts.GridOpts(pos_bottom="60%"))
        .add(line, grid_opts=opts.GridOpts(pos_top="60%"))
    )

grid.render_notebook()

主题设置

from pyecharts import options as opts
from pyecharts.charts import Bar
from pyecharts.globals import ThemeType

# 示例数据
cate = ['Apple''Huawei''Xiaomi''Oppo''Vivo''Meizu']
data1 = [123153891079823]
data2 = [56 7793684567]
"""
主题设置:
默认white
"""

bar = (Bar(init_opts=opts.InitOpts(theme=ThemeType.ROMANTIC))
       .add_xaxis(cate)
       .add_yaxis('电商渠道', data1)
       .add_yaxis('门店', data2)
       .set_series_opts(label_opts=opts.LabelOpts(is_show=False),
                        markpoint_opts=opts.MarkPointOpts(data=[opts.MarkPointItem(type_="max", name="最大值"),]))
       .set_global_opts(title_opts=opts.TitleOpts(title="Theme-ROMANTIC"))
      )

bar.render_notebook()

时间轴

from pyecharts import options as opts
from pyecharts.charts import Bar, Timeline
from pyecharts.globals import ThemeType

# 示例数据
cate = ['Apple''Huawei''Xiaomi''Oppo''Vivo''Meizu']
tl = Timeline()
for i in range(20152020):
    bar = (
        Bar()
        .add_xaxis(cate)
        .add_yaxis("线上", [random.randint(50150for _ in cate])
        .add_yaxis("门店", [random.randint(100200for _ in cate])
        .set_global_opts(title_opts=opts.TitleOpts("手机品牌{}年营业额".format(i)))
    )
    tl.add(bar, "{}年".format(i))

tl.render_notebook()

可视化分享

航线图

from pyecharts import options as opts
from pyecharts.charts import Geo
from pyecharts.globals import ChartType, SymbolType, ThemeType
import requests
r = requests.get('https://echarts.baidu.com/examples/data-gl/asset/data/flights.json')
data = r.json()
city = ['Beijing']
airports_code = []

geo = Geo(init_opts=opts.InitOpts(theme=ThemeType.DARK))
for i, airport in enumerate(data['airports']):
    if airport[1in city:
        geo.add_coordinate(i, airport[3], airport[4])
        airports_code.append(i)

route = [(x, y) for _, x, y in data['routes'if x in airports_code]


geo.add_schema(maptype="world",
                itemstyle_opts=opts.ItemStyleOpts())
geo.add("geo", route, 
        is_large = True,
        symbol_size=0,
        type_='lines',
        is_polyline=True,
        effect_opts=opts.EffectOpts(symbol='pin', symbol_size=1, trail_length=1, color="rgba(255,69,0,0.9)"),
        linestyle_opts=opts.LineStyleOpts(curve=0.2, width=0.2, color='rgb(245,245,245)',opacity=0.05)
       )
geo.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
geo.set_global_opts(title_opts=opts.TitleOpts(title="北京发出所有航线"),
                   legend_opts=opts.LegendOpts(is_show=False))


geo.render_notebook()
在这里插入图片描述

🎈气泡效果散点图

from pyecharts import options as opts
from pyecharts.charts import Scatter
from pyecharts.globals import ThemeType
from pyecharts.commons.utils import






请到「今天看啥」查看全文