前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >大赞Pyecharts,教你做动态可视化!

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

作者头像
1480
发布2020-04-08 17:56:05
2.1K0
发布2020-04-08 17:56:05
举报
文章被收录于专栏:数据分析1480数据分析1480

前言基本使用链式调用单独调用全局配置系列配置基本图表饼图折线图漏斗图热力图日历图地理图地理热点图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版本:

代码语言:javascript
复制
import pyecharts

print(pyecharts.__version__)

基本使用

链式调用

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

代码语言:javascript
复制
from pyecharts.charts import Bar
from pyecharts import options as opts

# 示例数据
cate = ['Apple', 'Huawei', 'Xiaomi', 'Oppo', 'Vivo', 'Meizu']
data1 = [, , , , , ]
data2 = [, , , , , ]
代码语言:javascript
复制
# 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()
单独调用

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

代码语言:javascript
复制
# 单独调用
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():)控制以下区域

代码语言:javascript
复制
"""
全局配置项使用示例:
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())控制图表中的文本,线样式,标记等.

代码语言:javascript
复制
"""
系列配置项使用示例:
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()

基本图表

饼图
代码语言:javascript
复制
from pyecharts.charts import Pie
from pyecharts import options as opts

# 示例数据
cate = ['Apple', 'Huawei', 'Xiaomi', 'Oppo', 'Vivo', 'Meizu']
data = [, , , , , ]
代码语言:javascript
复制
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()
折线图
代码语言:javascript
复制
from pyecharts.charts import Line
from pyecharts import options as opts

# 示例数据
cate = ['Apple', 'Huawei', 'Xiaomi', 'Oppo', 'Vivo', 'Meizu']
data1 = [, , , , , ]
data2 = [, , , , , ]
代码语言:javascript
复制
"""
折线图示例:
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[], data2[]], value=data2[])]))
       .set_global_opts(title_opts=opts.TitleOpts(title="Line-基本示例", subtitle="我是副标题"))
      )

line.render_notebook()
漏斗图
代码语言:javascript
复制
from pyecharts.charts import Funnel
from pyecharts import options as opts

# 示例数据
cate = ['访问', '注册', '加入购物车', '提交订单', '付款成功']
data = [, , , , ]
代码语言:javascript
复制
"""
漏斗图示例:
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()
热力图
代码语言:javascript
复制
from pyecharts.charts import HeatMap
from pyecharts import options as opts
from pyecharts.faker import Faker
import random

# 示例数据
data = [[i, j, random.randint(, )] for i in range() for j in range()]
代码语言:javascript
复制
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()
日历图
代码语言:javascript
复制
from pyecharts.charts import Calendar
from pyecharts import options as opts
import random
import datetime

# 示例数据
begin = datetime.date(, , )
end = datetime.date(, , )
data = [[str(begin + datetime.timedelta(days=i)), random.randint(, )]
        for i in range((end - begin).days + )]
代码语言:javascript
复制
"""
日历图示例:
"""
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_=,
                min_=,
                orient="horizontal",
                is_piecewise=True,
                pos_top="230px",
                pos_left="100px",
            )
        )
    )

calendar.render_notebook()
地理图
代码语言:javascript
复制
from pyecharts import options as opts
from pyecharts.charts import Map
import random

province = ['广东', '湖北', '湖南', '四川', '重庆', '黑龙江', '浙江', '山西', '河北', '安徽', '河南', '山东', '西藏']
data = [(i, random.randint(, )) for i in province]
代码语言:javascript
复制
_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_=, is_piecewise=True),
        )
    )

_map.render_notebook()
地理热点图
代码语言:javascript
复制
from pyecharts import options as opts
from pyecharts.charts import Geo
from pyecharts.globals import ChartType
import random

province = ['武汉', '十堰', '鄂州', '宜昌', '荆州', '孝感', '黄石', '咸宁', '仙桃']
data = [(i, random.randint(, )) for i in province]
代码语言:javascript
复制
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散点图
代码语言:javascript
复制
from pyecharts import options as opts
from pyecharts.charts import Scatter3D
from pyecharts.faker import Faker
import random


data = [(random.randint(, ), random.randint(, ), random.randint(, ))
        for _ in range()]
代码语言:javascript
复制
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轴翻转
代码语言:javascript
复制
from pyecharts.charts import Bar
from pyecharts import options as opts

# 示例数据
cate = ['Apple', 'Huawei', 'Xiaomi', 'Oppo', 'Vivo', 'Meizu']
data1 = [, , , , , ]
data2 = [, , , , , ]
代码语言:javascript
复制
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()
组合图表
代码语言:javascript
复制
from pyecharts import options as opts
from pyecharts.charts import Map, Bar, Grid
from pyecharts.globals import ChartType, ThemeType
import random

province = ['武汉', '十堰', '鄂州', '宜昌', '荆州', '孝感', '黄石', '咸宁', '仙桃']
data = [, , , , , , , , ]
代码语言:javascript
复制
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()
主题设置
代码语言:javascript
复制
from pyecharts import options as opts
from pyecharts.charts import Bar
from pyecharts.globals import ThemeType

# 示例数据
cate = ['Apple', 'Huawei', 'Xiaomi', 'Oppo', 'Vivo', 'Meizu']
data1 = [, , , , , ]
data2 = [, , , , , ]
代码语言:javascript
复制
"""
主题设置:
默认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()
时间轴
代码语言:javascript
复制
from pyecharts import options as opts
from pyecharts.charts import Bar, Timeline
from pyecharts.globals import ThemeType

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

tl.render_notebook()

可视化分享

航线图
代码语言:javascript
复制
from pyecharts import options as opts
from pyecharts.charts import Geo
from pyecharts.globals import ChartType, SymbolType, ThemeType
import requests
代码语言:javascript
复制
r = requests.get('https://echarts.baidu.com/examples/data-gl/asset/data/flights.json')
data = r.json()
代码语言:javascript
复制
city = ['Beijing']
airports_code = []

geo = Geo(init_opts=opts.InitOpts(theme=ThemeType.DARK))
for i, airport in enumerate(data['airports']):
    if airport[] in city:
        geo.add_coordinate(i, airport[], airport[])
        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=,
        type_='lines',
        is_polyline=True,
        effect_opts=opts.EffectOpts(symbol='pin', symbol_size=, trail_length=, 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()

在这里插入图片描述

?气泡效果散点图
代码语言:javascript
复制
from pyecharts import options as opts
from pyecharts.charts import Scatter
from pyecharts.globals import ThemeType
from pyecharts.commons.utils import JsCode

# 人均寿命于GDP
data = [[[,,,'Australia',],[,77.4,,'Canada',],[,,,'China',],[,74.7,,'Cuba',],[,,,'Finland',],[,77.1,,'France',],[,75.4,,'Germany',],[,78.1,,'Iceland',],[,57.7,,'India',],[,79.1,,'Japan',],[,67.9,,'North Korea',],[,,,'South Korea',],[,75.4,,'New Zealand',],[,76.8,,'Norway',],[,70.8,,'Poland',],[,69.6,,'Russia',],[,67.3,,'Turkey',],[,75.7,,'United Kingdom',],[,75.4,,'United States',]],
    [[,81.8,,'Australia',],[,81.7,,'Canada',],[,76.9,,'China',],[,78.5,,'Cuba',],[,80.8,,'Finland',],[,81.9,,'France',],[,81.1,,'Germany',],[,82.8,,'Iceland',],[,66.8,,'India',],[,83.5,,'Japan',],[,71.4,,'North Korea',],[,80.7,,'South Korea',],[,80.6,,'New Zealand',],[,81.6,,'Norway',],[,77.3,,'Poland',],[,73.13,,'Russia',],[,76.5,,'Turkey',],[,81.4,,'United Kingdom',],[,79.1,,'United States',]]]
代码语言:javascript
复制
scatter = (Scatter()
           .add_xaxis([i[] for i in data[]])
           .add_yaxis("1990年", [[i[],i[], i[]] for i in data[]],
                      # 渐变效果实现部分
                      color=JsCode("""new echarts.graphic.RadialGradient(0.4, 0.3, 1, [{
                                        offset: 0,
                                        color: 'rgb(251, 118, 123)'
                                    }, {
                                        offset: 1,
                                        color: 'rgb(204, 46, 72)'
                                    }])"""))
           .add_yaxis("2015年", [[i[],i[], i[]]  for i in data[]], 
                      # 渐变效果实现部分
                      color=JsCode("""new echarts.graphic.RadialGradient(0.4, 0.3, 1, [{
                                        offset: 0,
                                        color: 'rgb(129, 227, 238)'
                                    }, {
                                        offset: 1,
                                        color: 'rgb(25, 183, 207)'
                                    }])"""))
           .set_series_opts(label_opts=opts.LabelOpts(is_show=False))
           .set_global_opts(
               title_opts=opts.TitleOpts(title="1990 与 2015 年各国家人均寿命与 GDP"),
               tooltip_opts = opts.TooltipOpts(
                   # 通过执行js代码实现提示显示为国家
                   formatter=JsCode("function (param) {return param.data[2];}")),
               xaxis_opts=opts.AxisOpts(
                   # 设置坐标轴为数值类型
                   type_="value", 
                   # 显示分割线
                   splitline_opts=opts.SplitLineOpts(is_show=True)),
               yaxis_opts=opts.AxisOpts(
                   # 设置坐标轴为数值类型
                   type_="value",
                   # 默认为False表示起始为0
                   is_scale=True,
                   splitline_opts=opts.SplitLineOpts(is_show=True),),
               # 数据中第三个度量值通过图形的size来展示
               visualmap_opts=opts.VisualMapOpts(is_show=False, type_='size', min_=, max_=)
    ))

scatter.render_notebook() 
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-04-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据分析1480 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 基本使用
    • 链式调用
      • 单独调用
        • 全局配置
          • 系列配置
          • 基本图表
            • 饼图
              • 折线图
                • 漏斗图
                  • 热力图
                    • 日历图
                      • 地理图
                        • 地理热点图
                          • 3D散点图
                          • 其他特性
                            • xy轴翻转
                              • 组合图表
                                • 主题设置
                                  • 时间轴
                                  • 可视化分享
                                    • 航线图
                                      • ?气泡效果散点图
                                      相关产品与服务
                                      图像处理
                                      图像处理基于腾讯云深度学习等人工智能技术,提供综合性的图像优化处理服务,包括图像质量评估、图像清晰度增强、图像智能裁剪等。
                                      领券
                                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档