前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用pyecharts进行数据可视化

使用pyecharts进行数据可视化

作者头像
刘早起
发布2020-04-22 15:55:49
1.3K0
发布2020-04-22 15:55:49
举报
文章被收录于专栏:早起Python

使用pyecharts 1.5进行数据可视化

安装 pip install pyecharts 直接使用该命令安装的版本为最新版本为1.5。语法与之前版本大不一样,因此本文仅针对1.5及之后版本说明。若想使用之前版本请使用命令pip install pyecharts == 0.1.5.19 注:建议在jupyter notebook中coding,方便debug。

开始使用

基本套路就是先创建一个你需要的空图层,然后使用.set_global_opts修改全局项再用.set_series_opts修改具体的相关配置就可以。当然最好的学习地址一定是官方文档,但是里面介绍的太过复杂了,这里仅以快速上手使用为目标进行几个例子来说明套路。

地图

pyecharts比较好的就是绘制地图,这里以2019-nCov项目中安徽省地图绘制为例。

首先导入需要的包

代码语言:javascript
复制
from pyecharts.charts import Pie ,Grid,Bar,Line
from pyecharts.faker import Faker #数据包from pyecharts.charts import Map,Geo
from pyecharts import options as opts
from pyecharts.globals import ThemeType

OK,我现在有一个省份的一组数据,大概长这样

代码语言:javascript
复制
locate =['合肥市', '阜阳市', '亳州市', '安庆市', '马鞍山市', '铜陵市', '六安市', '滁州市', '池州市','蚌埠市','芜湖市','宿州市','宣城市','淮北市','淮南市','黄山市']`
data =['115','105','72','66','30','22','41','11','11','88','27','27','5','22','14','9']

这也是接触到的需要绘制地图的数据格式,两个list,一个是地名,一个是每个城市对应的数据,现在执行以下代码就可以得到安徽省的疫情地图。

代码语言:javascript
复制
list1 = [[locate[i],data[i]] for i in range(len(locate))] #首先创建数据
map_1 = Map(init_opts=opts.InitOpts(width="400px", height="460px")) #创建地图,其中括号内可以调整大小,也可以修改主题颜色。
map_1.add("安徽疫情", list1, maptype="安徽") #添加安徽地图
map_1.set_global_opts( #设置全局配置项#title_opts=opts.TitleOpts(title="安徽疫情"), 添加标题
    visualmap_opts=opts.VisualMapOpts(max_=120, is_piecewise=True),#最大数据范围 并且使用分段
    legend_opts=opts.LegendOpts(is_show=False), #是否显示图例
    )
map_1.render_notebook() #直接在notebook中显示# map_1.render('map1.html') 将地图以html形式保存在工作目录下

当然地图还有很多可以自定义的配置项,选择需要的配置项添加到对应的函数中即可。

代码语言:javascript
复制
# 数据项 (坐标点名称,坐标点值)
    data_pair: Sequence,

    # 地图类型,具体参考 pyecharts.datasets.map_filenames.json 文件
    maptype: str = "china",

    # 是否选中图例
    is_selected: bool = True,

    # 是否开启鼠标缩放和平移漫游。
    is_roam: bool = True,

    # 当前视角的中心点,用经纬度表示
    center: Optional[Sequence] = None,

    # 当前视角的缩放比例。
    zoom: Optional[Numeric] = 1,

    # 自定义地区的名称映射
    name_map: Optional[dict] = None,

    # 标记图形形状
    symbol: Optional[str] = None,

    # 是否显示标记图形
    is_map_symbol_show: bool = True,

    # 标签配置项,参考 `series_options.LabelOpts`
    label_opts: Union[opts.LabelOpts, dict] = opts.LabelOpts(),

    # 提示框组件配置项,参考 `series_options.TooltipOpts`
    tooltip_opts: Union[opts.TooltipOpts, dict, None] = None,

    # 图元样式配置项,参考 `series_options.ItemStyleOpts`
    itemstyle_opts: Union[opts.ItemStyleOpts, dict, None] = None,

    # 高亮标签配置项,参考 `series_options.LabelOpts`
    emphasis_label_opts: Union[opts.LabelOpts, dict, None] = None,

    # 高亮图元样式配置项,参考 `series_options.ItemStyleOpts`
    emphasis_itemstyle_opts: Union[opts.ItemStyleOpts, dict, None] = None,

饼图

最简单的一个饼图

代码语言:javascript
复制
from pyecharts.faker import Faker #导入官方数据示例包
c = (
    Pie() #创建一个饼图 ()里面可以添加配置项
    .add("", [list(z) for z in zip(Faker.choose(), Faker.values())]) #添加数据
    .set_global_opts(title_opts=opts.TitleOpts(title="Pie-基本示例")) #全局配置项
    .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}")) #图形配置项 配置标签
)
c.render_notebook() #展示图饼图的更多配置项
代码语言:javascript
复制
# 系列名称,用于 tooltip 的显示,legend 的图例筛选。
    series_name: str,

    # 系列数据项,格式为 [(key1, value1), (key2, value2)]
    data_pair: Sequence,

    # 系列 label 颜色
    color: Optional[str] = None,

    # 饼图的半径,数组的第一项是内半径,第二项是外半径# 默认设置成百分比,相对于容器高宽中较小的一项的一半
    radius: Optional[Sequence] = None,

    # 饼图的中心(圆心)坐标,数组的第一项是横坐标,第二项是纵坐标# 默认设置成百分比,设置成百分比时第一项是相对于容器宽度,第二项是相对于容器高度
    center: Optional[Sequence] = None,

    # 是否展示成南丁格尔图,通过半径区分数据大小,有'radius'和'area'两种模式。# radius:扇区圆心角展现数据的百分比,半径展现数据的大小# area:所有扇区圆心角相同,仅通过半径展现数据大小
    rosetype: Optional[str] = None,

    # 饼图的扇区是否是顺时针排布。
    is_clockwise: bool = True,

    # 标签配置项,参考 `series_options.LabelOpts`
    label_opts: Union[opts.LabelOpts, dict] = opts.LabelOpts(),

    # 提示框组件配置项,参考 `series_options.TooltipOpts`
    tooltip_opts: Union[opts.TooltipOpts, dict, None] = None,

    # 图元样式配置项,参考 `series_options.ItemStyleOpts`
    itemstyle_opts: Union[opts.ItemStyleOpts, dict, None] = None,

继续使用地图里的数据绘制饼图,现在想看安徽各地区疫情分布比,就可以考虑使用饼图(玫瑰图)。详细代码

代码语言:javascript
复制
map_2 = (
    Pie(init_opts=opts.InitOpts(width="600px", height="500px")) 创建一个饼图
    .add(
        "", #图名
        [[locate[i],data[i]] for i in range(len(locate))], #添加数据
        radius=["40%", "75%"], # 调整半径
    )
    .set_global_opts(
        legend_opts=opts.LegendOpts(
            orient="vertical", pos_top="10%", pos_left="88%"#图例设置
        ),
    )
    .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}")) #设置标签
)
map_2.render_notebook() #直接在notebook中显示#map_2.render('map2.html') #保存到本地柱状图

demo

代码语言:javascript
复制
c = (
    Bar()
    .add_xaxis(Faker.choose())
    .add_yaxis("商家A", Faker.values()) #数据配置
    .add_yaxis("商家B", Faker.values()) #数据配置
    .set_global_opts(title_opts=opts.TitleOpts(title="Bar-基本示例", subtitle="我是副标题")) #全局配置标题
)
c.render_notebook()
通过添加配置项可以调整标题、图例、粗细、位置、背景图等等
代码语言:javascript
复制
# 系列数据
    yaxis_data: Sequence[Numeric, opts.BarItem, dict],

    # 是否选中图例
    is_selected: bool = True,

    # 使用的 x 轴的 index,在单个图表实例中存在多个 x 轴的时候有用。
    xaxis_index: Optional[Numeric] = None,

    # 使用的 y 轴的 index,在单个图表实例中存在多个 y 轴的时候有用。
    yaxis_index: Optional[Numeric] = None,

    # 系列 label 颜色
    color: Optional[str] = None,

    # 数据堆叠,同个类目轴上系列配置相同的 stack 值可以堆叠放置。
    stack: Optional[str] = None,

    # 同一系列的柱间距离,默认为类目间距的 20%,可设固定值
    category_gap: Union[Numeric, str] = "20%",

    # 不同系列的柱间距离,为百分比(如 '30%',表示柱子宽度的 30%)。# 如果想要两个系列的柱子重叠,可以设置 gap 为 '-100%'。这在用柱子做背景的时候有用。
    gap: Optional[str] = None,

    # 标签配置项,参考 `series_options.LabelOpts`
    label_opts: Union[opts.LabelOpts, dict] = opts.LabelOpts(),

    # 标记点配置项,参考 `series_options.MarkPointOpts`
    markpoint_opts: Union[opts.MarkPointOpts, dict, None] = None,

    # 标记线配置项,参考 `series_options.MarkLineOpts`
    markline_opts: Union[opts.MarkLineOpts, dict, None] = None,

    # 提示框组件配置项,参考 `series_options.TooltipOpts`
    tooltip_opts: Union[opts.TooltipOpts, dict, None] = None,

    # 图元样式配置项,参考 `series_options.ItemStyleOpts`
    itemstyle_opts: Union[opts.ItemStyleOpts, dict, None] = None,

同一图层绘制多图

如果想要同时叠加绘制图形可以采用参考以下方法

代码语言:javascript
复制
def two_pic() -> Bar: 
    x = Faker.choose() #选择数据
    bar = (  #先绘制bar
        Bar()
        .add_xaxis(x)
        .add_yaxis("商家A", Faker.values())
        .add_yaxis("商家B", Faker.values())
        .set_global_opts(title_opts=opts.TitleOpts(title="Overlap-line+scatter"))
    )
    line = ( #再添加line
        Line()
        .add_xaxis(x)
        .add_yaxis("商家A", Faker.values())
        .add_yaxis("商家B", Faker.values())
    )
    bar.overlap(line)
    return bar
two_pic().render_notebook()
总结

使用新版pyecharts并不难,基本套路都和上面一样,只要先学会画图套路,再多读官方文档就可以。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-02-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 早起Python 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 使用pyecharts 1.5进行数据可视化
    • 开始使用
      • 地图
      • 饼图
      • 同一图层绘制多图
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档