前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >还在用matplotlib画图?你out啦

还在用matplotlib画图?你out啦

作者头像
MeteoAI
发布2019-07-24 16:26:41
2K0
发布2019-07-24 16:26:41
举报
文章被收录于专栏:MeteoAIMeteoAIMeteoAI

概述

进行数据处理的时候,可视化是非常重要的数据分析方式,但是有时候在处理大批量的数据时,由于数据量过多,数据往往会非常密集,而不能发现有效信息,而我们经常使用的matplotlib不能满足这样的需求,这就需要交互式的可视化方案,提供比较方便和快捷的数据可视化操作。前几天在处理数据的时候,需要实现数据可以滑动或者选择查看,就发现了几个python实现交互式可视化的库,跟大家分享一下。 首先简单介绍一下python的可视化的分类。在Python语言环境里,有不少可视化解决方案,主要的可以大致分为几类:

•基于maplotlib的可视化库,例如经常使用的matplotlib,seaborn以及pandas和scikit-plot的绘图•基于JavaScript的可视化库,例如broken,plotly(DASH)以及pyecharts等库,可以实现交互式的可视化操作•基于上述两者或其他组合功能的库,例如holoviews可以和Seaborn,pandas或者broken组合使用下图是Jake VanderPlas在2017年对python可视化解决方案的总结,有些新的包没有包含,可以作为参考

图片来源于https://speakerdeck.com/jakevdp/pythons-visualization-landscape-pycon-2017

我在解决python交互式的可视化问题时,主要用到的是基于JavaScript的可视化库pyecharts。pyecharts 是一个用于生成 Echarts 图表的类库。Echarts 是百度开源的一个数据可视化 JS 库。用 Echarts 生成的图可视化效果非常棒,pyecharts 是为了与 Python 进行对接,方便在 Python 中直接使用数据生成图。使用pyecharts可以生成独立的网页,也可以在flask、django中集成使用 ,此外也可以直接利用render_notebook,直接在jupyter notebook里调用渲染。

pyecharts的安装

pyecharts 分为 v0.5.X 和 v1 两个大版本,v0.5.X 和 v1 间不兼容,v1 是一个全新的版本。其中v0.5.X支持python2.7和3.4+,未来不再进行维护,v1仅支持python3.6+,是以后版本迭代的基础。 安装利用pip,利用conda安装没有成功

$ pip install pyecharts

或源码安装

$ git clone https://github.com/pyecharts/pyecharts.git
$ cd pyecharts
$ pip install -r requirements.txt
$ python setup.py install
# 或者执行 python install.py

常用的图表

一个简单的例子

from pyecharts.charts import Bar

bar = Bar()
bar.add_xaxis(["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"])
bar.add_yaxis("商家A", [5, 20, 36, 10, 75, 90])
bar.add_yaxis("商家B", [8, 15, 49, 15, 65, 80])
bar.render('bar.html')

render 会生成本地 HTML 文件,默认会在当前目录生成 render.html 文件吗,也可以传入路径参数,如 bar.render("bar.html"),此外如果使用的是juypter notebook 可以直接reader_notebook在jupyter里面渲染。打开html文件:

这是两个商家不同衣服销量对比的柱状图,可以查看数值的详细信息,以及对不同的项目进行选择。 接下来参考官方的示例,对常用的图表进行简单示范:

柱状图

柱状图可以进行对比分析,数据是对于不同地级市的观测和预报数据,由于数据太多,单独画在一个图片中,将会非常拥挤,无法清晰看出差距,就需要借助于交互式的图像方案:

from pyecharts import options as opts
from pyecharts.charts import Bar
def bar_test(df) -> Bar:
    c = (
        Bar()
        .add_xaxis(df.index.tolist())
        .add_yaxis("观测", df['气温观测'].tolist(),category_gap="10%", gap="5%")
        .add_yaxis("预报", df['气温预测'].tolist(), category_gap="10%", gap="5%")
        .set_global_opts(
            title_opts=opts.TitleOpts(title="地级市气温观测与预报分析"),
            toolbox_opts=opts.ToolboxOpts(),#添加右上角的工具选项
            yaxis_opts=opts.AxisOpts(name="气温"),
            xaxis_opts=opts.AxisOpts(name="城市"),
            datazoom_opts=[opts.DataZoomOpts(),opts.DataZoomOpts(orient="vertical"), opts.DataZoomOpts(type_="inside")]#增添x,y轴以及内部的缩放
        )
       .set_series_opts(
        label_opts=opts.LabelOpts(is_show=False),
        markline_opts=opts.MarkLineOpts(
            data=[
                opts.MarkLineItem(type_="min", name="最小值"),
                opts.MarkLineItem(type_="max", name="最大值"),
                opts.MarkLineItem(type_="average", name="平均值"),
            ]
        ),#添加标示线
        markpoint_opts=opts.MarkPointOpts(
                data=[
                    opts.MarkPointItem(type_="max", name="最大值"),
                    opts.MarkPointItem(type_="min", name="最小值"),
                    opts.MarkPointItem(type_="average", name="平均值"),
                ]
            )
       )#添加标示点
    )
    return c
c=bar_datazoom_slider_vertical(data)
c.render_notebook()

选择不同的数据

选择不同的范围

对于不同地级市观测和预报的气温进行对比画图,在图中我们可以选择观测或者预报数据,缩小x范围,查看局部的差异,或者选定y轴范围,查看不同温度范围的数值分布,右上角的工具可以提供图像的放大和存储以及原始数据的查看。

#堆叠柱状图
def bar_datazoom_slider_vertical(df) -> Bar:
    c = (
        Bar()
        .add_xaxis(df.index.tolist())
        .add_yaxis("3月", df['3月份降水观测'].tolist(),category_gap="10%", gap="5%", stack="stack1")
        .add_yaxis("4月", df['4月份降水观测'].tolist(), category_gap="10%", gap="5%", stack="stack1")
        .add_yaxis("5月", df['5月份降水观测'].tolist(), category_gap="10%", gap="5%", stack="stack1")
        .set_global_opts(
            title_opts=opts.TitleOpts(title="地级市降水春季分析"),
            toolbox_opts=opts.ToolboxOpts(),
            yaxis_opts=opts.AxisOpts(name="降水"),
            xaxis_opts=opts.AxisOpts(name="城市"),
            datazoom_opts=[opts.DataZoomOpts(),opts.DataZoomOpts(orient="vertical"), opts.DataZoomOpts(type_="inside")]
        )
       .set_series_opts(label_opts=opts.LabelOpts(is_show=False))
    )
    return c
c=bar_datazoom_slider_vertical(data.iloc)
c.render_notebook()

选择不同的月份

查看局部的数据

图中是3,4,5三个月的降水累计分布图,可以选择不同的月份,查看局部的分布或者特定降水范围的数据

箱式图

箱式图可以查看两个数据的统计属性是否一致,包括均值,最值,中值等

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


def boxpolt_base() -> Boxplot:
    v1 = [
        [850, 740, 900, 1070, 930, 850, 950, 980, 980, 880]
        + [1000, 980, 930, 650, 760, 810, 1000, 1000, 960, 960],
        [960, 940, 960, 940, 880, 800, 850, 880, 900]
        + [840, 830, 790, 810, 880, 880, 830, 800, 790, 760, 800],
    ]
    v2 = [
        [890, 810, 810, 820, 800, 770, 760, 740, 750, 760]
        + [910, 920, 890, 860, 880, 720, 840, 850, 850, 780],
        [890, 840, 780, 810, 760, 810, 790, 810, 820, 850, 870]
        + [870, 810, 740, 810, 940, 950, 800, 810, 870],
    ]
    c = Boxplot()
    c.add_xaxis(["expr1", "expr2"]).add_yaxis("A", c.prepare_data(v1)).add_yaxis(
        "B", c.prepare_data(v2)
    ).set_global_opts(title_opts=opts.TitleOpts(title="BoxPlot-基本示例"))
    return c
c=boxpolt_base()
c.render_notebook()

从图中可以清晰看到每个统计属性

折线图

from pyecharts import options as opts
from pyecharts.charts import Line
def line_test(df) -> Line:
    c = (
        Line()
        .add_xaxis(df.index.tolist())
        .add_yaxis("观测", df['气温观测'].tolist(),linestyle_opts=opts.LineStyleOpts(color="k", width=2))
        .add_yaxis("预报", df['气温预测'].tolist(),linestyle_opts=opts.LineStyleOpts(color="red", width=2))
        .set_global_opts(
            title_opts=opts.TitleOpts(title="地级市气温观测与预报分析"),
            toolbox_opts=opts.ToolboxOpts(),
            yaxis_opts=opts.AxisOpts(name="气温"),
            xaxis_opts=opts.AxisOpts(name="城市"),
            datazoom_opts=[opts.DataZoomOpts(),opts.DataZoomOpts(orient="vertical"), opts.DataZoomOpts(type_="inside")]
        )
       .set_series_opts(
        label_opts=opts.LabelOpts(is_show=False),
        markline_opts=opts.MarkLineOpts(
            data=[
                opts.MarkLineItem(type_="min", name="最小值"),
                opts.MarkLineItem(type_="max", name="最大值"),
                opts.MarkLineItem(type_="average", name="平均值"),
            ]
        ),
        markpoint_opts=opts.MarkPointOpts(
                data=[
                    opts.MarkPointItem(type_="max", name="最大值"),
                    opts.MarkPointItem(type_="min", name="最小值"),
                    opts.MarkPointItem(type_="average", name="平均值"),
                ]
            )
       )
    )
    return c
c=line_test(data)
c.render_notebook()

滑动x轴查看局部信息

滑动y轴查看不同的取值范围

图中是不同地级市观测与预报数据的折线图,可以通过滑动x轴查看局部的趋势和数值,设定y轴,查看特定温度范围的数据

散点图

散点图可以查看分布的趋势

# 散点图
from pyecharts import options as opts
from pyecharts.charts import Scatter
def scatter_visualmap_color(df) -> Scatter:
    c = (
        Scatter()
        .add_xaxis(df.index.tolist())
        .add_yaxis("观测", df['降水观测'].tolist())
        .add_yaxis("预报", df['降水预测'].tolist())
        .set_global_opts(
            title_opts=opts.TitleOpts(title="Scatter-VisualMap(Size)"),
            visualmap_opts=opts.VisualMapOpts(type_="size", max_=150, min_=20),
        )
    )
    return c
c=scatter_visualmap_color(data.iloc[::20])
c.render_notebook()

大小可调节的散点图

图中是不同地级市,观测与预报气温的散点图,大小表示气温的高低,通过左方的调节bar,可以选择一定范围的气温,进行查看分布

热力图

import random

from example.commons import  Faker
from pyecharts import options as opts
from pyecharts.charts import HeatMap

def heatmap_base() -> HeatMap:
    value = [[i, j, random.randint(0, 50)] for i in range(24) for j in range(7)]
    c = (
        HeatMap()
        .add_xaxis(Faker.clock)
        .add_yaxis("series0", Faker.week, value)
        .set_global_opts(
            title_opts=opts.TitleOpts(title="HeatMap-基本示例"),
            visualmap_opts=opts.VisualMapOpts(),
        )
    )
    return c
c=heatmap_base()
c.render_notebook()

热力图

由于我的样例数据没有提供相关的信息,就借用官方的示例数据进行简单展示,可以应用于数据缺失或频率的一个展示

官方其他示例

地理区划图

地理线图

3D展示

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

本文分享自 MeteoAI 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 概述
  • pyecharts的安装
  • 常用的图表
    • 一个简单的例子
      • 柱状图
        • 箱式图
          • 折线图
            • 散点图
              • 热力图
                • 官方其他示例
                相关产品与服务
                灰盒安全测试
                腾讯知识图谱(Tencent Knowledge Graph,TKG)是一个集成图数据库、图计算引擎和图可视化分析的一站式平台。支持抽取和融合异构数据,支持千亿级节点关系的存储和计算,支持规则匹配、机器学习、图嵌入等图数据挖掘算法,拥有丰富的图数据渲染和展现的可视化方案。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档