美文网首页
Python 数据可视化:绘图新概念

Python 数据可视化:绘图新概念

作者: you的日常 | 来源:发表于2020-12-03 11:32 被阅读0次

    前面两课分别介绍了 Matplotlib 和 Seaborn,其基本的绘图思想是一样的:面向对象修改或添加对象的属性。本课要介绍的 Plotnine,看标题就明白,它必然有不同以往之处,也的确与 Matplotlib 体系有所不同。

    Plotnine 在绘图上,引入了“图层”的概念——如果熟悉美工妹妹的工作,这个概念就不难理解。它不是师承于 Matplotlib,而是基于 ggplot2。

    3.1.1 渊源和特点

    能够用于数据科学的语言不只是 Python,还有很多其他语言,比如 R ——一个具有一定历史并且目前也被很多人使用的语言。

    R 语言,主要用于统计分析、绘图、数据挖掘,由新西兰奥克兰大学的罗斯·伊哈卡和罗伯特·杰特曼发明。

    那么,支持 R 语言绘图的工具之一就是 ggplot2(官网:https://ggplot2.tidyverse.org/),它由 Hadley Wickham 创建,其绘图基本思想是(以下是基本概念介绍,参考了 STHDA 的有关内容):

    Plot(图)= Data(数据集)+ Aesthetics(美学映射)+ Geometry(几何对象)

    这种制度的基本规则来自于 The Grammar of Graphics 一书中的规定,各项的含义如下:

    • Data,数据集;
    • Aesthetics,美学映射,比如将变量映射给 X、Y 坐标轴,或者映射给颜色、大小、形状等图形属性;
    • Geometry,几何对象,比如柱形图、直方图、散点图、线图、密度图等。

    在 ggplot2 中有两个主要绘图函数:

    • qplot,快速绘图;
    • ggplot,此函数是 ggplot2 的精髓,远比 qplot() 强大,可以绘制复杂的图形。

    在 ggplot2 中有几个基本概念,需要了解一下。

    • 图层(Layer):一个图层好比是一张“透明纸”,包含有各种图形元素,可以分别建立不同的图层,然后叠放在一起,组合成图形的最终效果。
    • 标度(Scale):标度控制了数学空间到图形元素空间的映射。一组连续数据可以映射到 X 轴坐标,也可以映射到一组连续的渐变色彩;一组分类数据可以映射成为不同的形状,也可以映射成为不同的大小。
    • 坐标系(Coordinate):坐标系控制了图形的坐标轴并影响所有图形元素,最常用的是直角坐标轴。坐标轴可以进行变换以满足不同的需要,如对数坐标,其他可选的还有极坐标。
    • 位面、组图、分面(Facet):很多时候需要将数据按某种方法分组,分别进行绘图。facet 就是控制分组绘图的方法和排列形式。(注意,将 facet 翻译为“位面”,有时候会造成误解,因为 planes 也翻译为“位面”)。

    这是 R 的 ggplot2 的概念,Python 要挑战 R 语言,那么它有的 Python 就要有了,这样,我们在 Python 中也能使某些绘图工具,实现上述的绘图思想。比较常用的有:

    Plotnine 因为继承了 R 语言的 ggplot2 的绘图思想,因此,图层概念就是它的核心。

    Plotnine 的安装应该已经在第 0-3 课中完成了,如果尚未安装,请参考之。

    3.1.2 理解图层含义

    先用一个示例体会一下“分层绘图—图层”的思想和操作流程。

    在 Plotnine 中,也有类似 Seaborn 那样集成的数据集。

    %matplotlib inline
    import plotnine as p9
    from plotnine import data
    mg = data.mpg
    mg.head()
    
    
    avatar
    mg.info()
    
    #out
    <class 'pandas.core.frame.DataFrame'>
    RangeIndex: 234 entries, 0 to 233
    Data columns (total 11 columns):
    manufacturer    234 non-null category
    model           234 non-null category
    displ           234 non-null float64
    year            234 non-null int64
    cyl             234 non-null int64
    trans           234 non-null category
    drv             234 non-null category
    cty             234 non-null int64
    hwy             234 non-null int64
    fl              234 non-null category
    class           234 non-null category
    dtypes: category(6), float64(1), int64(4)
    memory usage: 13.9 KB
    
    

    这个数据集中记录了一些跟汽车有关的数据,其中三个特征,是下面将要用到的:

    • displ,发动机排气量;
    • hwy,高速公路上每加仑汽油能够行驶的路程;
    • cyl,汽缸数目。

    因为 Plotnine 继承了 ggplot2,本质上可以理解为就是要跟 R 语言争夺绘图领域的老大地位。那么如果读者是 Plotnine 的发明者,会如何命名自己的函数,才能更有利于把原来使用 ggplot2 的用户争取过来呢?

    当然是所有的函数和语法都要保持与 ggplot2 一样。

    英雄所见略同,都想到一起了。凡是在 ggplot2 中能够使用的函数,在 Plotnine 中几乎都有,而且使用方式也一样。因此,如果以前学过了 ggplot2,迁移过来丝毫不费力;如果没学过,那么当然就需要阅读本课程了。当然,如果在网上搜索到了 ggplot2 的方法,也可以直接拿到 Plotnine 中使用。

    这招的确很绝妙,这就是所谓的后发优势。

    那就先制作第一张图。

    相关文章

      网友评论

          本文标题:Python 数据可视化:绘图新概念

          本文链接:https://www.haomeiwen.com/subject/vflebktx.html