zoukankan      html  css  js  c++  java
  • 小白学 Python 数据分析(18):Matplotlib(三)常用图表(上)

    人生苦短,我用 Python

    前文传送门:

    小白学 Python 数据分析(1):数据分析基础

    小白学 Python 数据分析(2):Pandas (一)概述

    小白学 Python 数据分析(3):Pandas (二)数据结构 Series

    小白学 Python 数据分析(4):Pandas (三)数据结构 DataFrame

    小白学 Python 数据分析(5):Pandas (四)基础操作(1)查看数据

    小白学 Python 数据分析(6):Pandas (五)基础操作(2)数据选择

    小白学 Python 数据分析(7):Pandas (六)数据导入

    小白学 Python 数据分析(8):Pandas (七)数据预处理

    小白学 Python 数据分析(9):Pandas (八)数据预处理(2)

    小白学 Python 数据分析(10):Pandas (九)数据运算

    小白学 Python 数据分析(11):Pandas (十)数据分组

    小白学 Python 数据分析(12):Pandas (十一)数据透视表(pivot_table)

    小白学 Python 数据分析(13):Pandas (十二)数据表拼接

    小白学 Python 数据分析(14):Pandas (十三)数据导出

    小白学 Python 数据分析(15):数据可视化概述

    小白学 Python 数据分析(16):Matplotlib(一)坐标系

    小白学 Python 数据分析(17):Matplotlib(二)基础操作

    折线图

    各位同学好,我们从本篇开始介绍一些 Matplotlib 的常用图表。

    说道常用图表,第一个肯定是折线图,折线图主要用于表现随着时间的推移而产生的某种趋势。

    在 Matplotlib 中,化折线图主要是使用到了 plt 库中的 plot 方法,下面我们看下 plot 的语法。

    plot 函数的一般的调用形式如下:

    #单条线:
    plot([x], y, [fmt], *, data=None, **kwargs)
    
    #多条线:
    plot([x], y, [fmt], [x2], y2, [fmt2], ..., **kwargs)
    

    可选参数 [fmt] 是一个字符串来定义图的基本属性如:颜色(color),点型(marker),线型(linestyle)。

    具体形式 fmt = '[color][marker][line]'

    这里我们写一个简单的 fmt 的表达式,需要注意的是 fmt 接收的是每个属性的单个字母缩写,如果使用的是全名的话则不能使用 fmt 参数进行组合赋值。

    plot(x, y, 'bo-')
    

    上面这个示例中的 bo- 的含义是蓝色圆点实线,其中 b 代表了颜色 blue , o 代表了点型 circle marker (圆点), - 代表了线型 solid line style (实线) 。

    如果我们使用全名的话上面这个示例可以改成:

    plot(x, y, color='blue', marker='o', linestyle='-')
    

    下面小编摘抄一下官方文档上的对应的类型,官方文档地址:https://matplotlib.org/api/_as_gen/matplotlib.pyplot.plot.html ,如果不想打开官方文档,也可以在程序中运行下面这段代码,一样可以看到:

    import matplotlib.pyplot as plt
    
    help(plt.plot)
    

    首先是颜色 color 的可取值:

    =============    ===============================
    character        color
    =============    ===============================
    ``'b'``          blue
    ``'g'``          green
    ``'r'``          red
    ``'c'``          cyan
    ``'m'``          magenta
    ``'y'``          yellow
    ``'k'``          black
    ``'w'``          white
    =============    ===============================
    

    这里有一点需要注意,除了可以使用上面的这些值,同样可以使用十六进制的 RGB 字符串,如: #FFFFFF 等。

    接下来是点型 Maker 的可选值:

    =============    ===============================
    character        description
    =============    ===============================
    ``'.'``          point marker
    ``','``          pixel marker
    ``'o'``          circle marker
    ``'v'``          triangle_down marker
    ``'^'``          triangle_up marker
    ``'<'``          triangle_left marker
    ``'>'``          triangle_right marker
    ``'1'``          tri_down marker
    ``'2'``          tri_up marker
    ``'3'``          tri_left marker
    ``'4'``          tri_right marker
    ``'s'``          square marker
    ``'p'``          pentagon marker
    ``'*'``          star marker
    ``'h'``          hexagon1 marker
    ``'H'``          hexagon2 marker
    ``'+'``          plus marker
    ``'x'``          x marker
    ``'D'``          diamond marker
    ``'d'``          thin_diamond marker
    ``'|'``          vline marker
    ``'_'``          hline marker
    =============    ===============================
    

    大家看前面的符号应该大致都能知道是啥意思吧,小编这里有点小懒(属实有点多,小编自己的碎碎念:常用的就那么几种,一张图上也不会出现太多种的线型,反正会有默认值),就不翻译了,如果有看不懂的同学可以 CV 后面的英文到某些翻译网站上自行翻译。

    接下来是线型 Line Styles 的可选值:

    =============    ===============================
    character        description
    =============    ===============================
    ``'-'``          solid line style 实线
    ``'--'``         dashed line style 虚线
    ``'-.'``         dash-dot line style 点画线
    ``':'``          dotted line style 点线
    =============    ===============================
    

    这个就不解释了吧,各位同学可以自行尝试一下。

    最后再来个示例吧,数据还是使用上一篇文章的:

    import matplotlib.pyplot as plt
    
    # 处理中文乱码
    plt.rcParams['font.sans-serif']=['SimHei']
    
    x_data = [2011,2012,2013,2014,2015,2016,2017]
    y_data = [58000,60200,63000,71000,84000,90500,107000]
    y_data_1 = [78000,80200,93000,101000,64000,70500,87000]
    
    plt.title(label='xxx 公司 xxx 产品销量')
    # 设置标题
    plt.plot(x_data, y_data, linestyle = '-.', label = '产品销量')
    plt.plot(x_data, y_data_1, label = '用户增长数')
    # 开启网格线
    plt.grid(True)
    # 设置图例
    plt.legend()
    # 文件保存
    plt.savefig("plot_demo.png")
    

    结果如下:

    这个样例中,我们将产品销量使用点线图来表示。

    柱状图

    普通柱状图

    柱状图主要用于查看各分组数据的数量分布,以及各个分组数据之间的数量比较。

    在 Matplotlib 中使用的是 bar() 方法,还是先看下 bar() 的语法:

    atplotlib.pyplot.bar(left, height, width=0.8, bottom=None, hold=None, data=None, **kwargs)
    
    参数 接收值 说明 默认值
    left array x 轴;
    height array 柱形图的高度,也就是y轴的数值;
    alpha 数值 柱形图的颜色透明度 ; 1
    width 数值 柱形图的宽度; 0.8
    color(facecolor) string 柱形图填充的颜色; 随机色
    edgecolor string 图形边缘颜色 None
    label string 解释每个图像代表的含义
    linewidth(linewidths / lw) 数值 边缘or线的宽度 1

    其他详细的用法可以参考官方文档:https://matplotlib.org/api/pyplot_api.html

    我们还是先来一个简单的示例,数据依然使用上面的数据:

    import matplotlib.pyplot as plt
    import numpy as np
    
    # 处理中文乱码
    plt.rcParams['font.sans-serif']=['SimHei']
    
    x_data = np.array([2011,2012,2013,2014,2015,2016,2017])
    y_data = np.array([58000,60200,63000,71000,84000,90500,107000])
    y_data_1 = np.array([78000,80200,93000,101000,64000,70500,87000])
    
    plt.title(label='xxx 公司 xxx 产品销量')
    
    plt.bar(x_data, y_data, width=0.5, alpha=0.6, facecolor = 'deeppink', edgecolor = 'darkblue', lw=2, label='产品销量')
    
    plt.legend()
    
    plt.savefig("bar_demo_1.png")
    
    • width : 柱子的宽度
    • alpha : 透明度
    • facecolor : 柱子填充色
    • edgecolor : 柱子轮廓色
    • lw : 柱子轮廓宽度
    • label : 图例

    结果如下:

    并排柱状图

    我们还有一组数据,接下来是两个柱形图并列显示,这里调用的还是 bar() ,只不过需要调整的是柱子的位置:

    import matplotlib.pyplot as plt
    import numpy as np
    
    # 处理中文乱码
    plt.rcParams['font.sans-serif']=['SimHei']
    
    x_data = np.array([2011,2012,2013,2014,2015,2016,2017])
    y_data = np.array([58000,60200,63000,71000,84000,90500,107000])
    y_data_1 = np.array([78000,80200,93000,101000,64000,70500,87000])
    
    plt.title(label='xxx 公司 xxx 产品销量')
    
    plt.bar(x_data, y_data, width=0.3, alpha=0.6, facecolor = 'pink', edgecolor = 'blue', lw=1, label='产品销量')
    plt.bar(x_data + 0.3, y_data_1, width=0.3, alpha=0.6, facecolor = 'blue', edgecolor = 'blue', lw=1, label='用户增长数')
    
    plt.legend()
    
    plt.savefig("bar_demo_2.png")
    

    这里比较重要的是 x_data + 0.3 ,相当于把用户量的柱子向右移动了 0.3 ,否则会造成重合。

    结果如下:

    堆积柱状图

    还有一种柱形图是堆积柱形图,就是把柱状图堆叠在一起,我们还是通过示例来看:

    import matplotlib.pyplot as plt
    import numpy as np
    
    # 处理中文乱码
    plt.rcParams['font.sans-serif']=['SimHei']
    
    x_data = np.array([2011,2012,2013,2014,2015,2016,2017])
    y_data = np.array([58000,60200,63000,71000,84000,90500,107000])
    y_data_1 = np.array([78000,80200,93000,101000,64000,70500,87000])
    
    plt.title(label='xxx 公司 xxx 产品销量')
    
    plt.bar(x_data, y_data, width=0.3, alpha=0.6, facecolor = 'pink', edgecolor = 'blue', lw=1, label='产品销量')
    plt.bar(x_data, y_data_1, bottom=y_data, width=0.3, alpha=0.6, facecolor = 'blue', edgecolor = 'blue', lw=1, label='用户增长数')
    
    plt.legend()
    
    plt.savefig("bar_demo_3.png")
    

    这种堆积柱状图主要是通过参数 bottom 来实现的,含义是底部开始的位置。

    结果如下:

    横向柱状图

    其实横向柱状图应该是叫条形图,而且使用的方法也不再是 bar() 了,而是变成了 barh()

    咦,这个看起来和 bar() 很像嘛,有可能是兄弟关系。

    语法如下:

    matplotlib.pyplot.barh(y, width, height=0.8, left=None, *, align='center', **kwargs)
    

    也不多说啥了,和上面的 bar() 简直如出一辙,还是再来个示例:

    import matplotlib.pyplot as plt
    import numpy as np
    
    # 处理中文乱码
    plt.rcParams['font.sans-serif']=['SimHei']
    
    x_data = np.array([2011,2012,2013,2014,2015,2016,2017])
    y_data = np.array([58000,60200,63000,71000,84000,90500,107000])
    
    plt.title(label='xxx 公司 xxx 产品销量')
    
    
    plt.barh(x_data, y_data, alpha=0.6, facecolor = 'deeppink', edgecolor = 'deeppink', label='产品销量')
    
    plt.legend()
    
    plt.savefig("barh_demo.png")
    

    结果如下:

    本篇内容就到这里了,各位同学想要代码或者想要图片都可以直接访问代码仓库获得。

    代码仓库

    老规矩,所有的示例代码都会上传至代码管理仓库 Github 和 Gitee 上,方便大家取用。

    示例代码-Github

    示例代码-Gitee

    参考

    https://blog.csdn.net/sinat_36219858/article/details/79800460

    https://blog.csdn.net/weixin_40683253/article/details/87641416

  • 相关阅读:
    迭代器相关整理
    闭包的功能举例
    函数参数相关整理
    python中进制转换及IP地址转换
    dD Geometry Kernel ( Geometry Kernels) CGAL 4.13 -User Manual
    2D and 3D Linear Geometry Kernel ( Geometry Kernels) CGAL 4.13 -User Manual
    Monotone and Sorted Matrix Search ( Arithmetic and Algebra) CGAL 4.13 -User Manual
    Algebraic Kernel ( Arithmetic and Algebra) CGAL 4.13 -User Manual
    数论中的环概念
    QT的配置及目录结构
  • 原文地址:https://www.cnblogs.com/babycomeon/p/12550193.html
Copyright © 2011-2022 走看看