• python数据可视化(matplotlib)


    数据可视化

    基本概念

    数据可视化是指借助于图形化的手段,清晰、快捷有效的传达与沟通信息。同时,也可以辅助用户做出相应的判断,更好的去洞悉数据背后的价值。

    字不如表,表不如图。

    观察号码的频率,每个号码出现了多少次?

    文字

    08 10 15 20 30 31 33 06
    01 09 10 17 21 28 32 13
    02 05 08 13 19 21 28 10
    03 05 07 14 18 23 25 07
    …… ……

    表格

    图形

    通过可视化图表方式,就可以清晰的表达信息

    可视化图形辅助决策

    1854 年英国伦敦霍乱病流行时,斯诺博士在绘有霍乱流行地区所有道路、房屋、饮用水机井等内容的城区地图上,标出了每个霍乱病死者的住家位置,得到了霍乱病死者居住位置分布图,发现了霍乱病源之所在:布劳德大街(现布劳维克大街)的公用抽水机

    matplotlib

    matplotlib是用于Python的绘图库,提供各种常用图形的绘制。例如,条形图,柱形图,线图,散点图等。

    import matplotlib as mpl
    import matplotlib.pyplot as plt
    import numpy as np
    import pandas as pd

    图形绘制

    绘制线图

    可以通过matplotlib.pyplot的plot方法进行图形绘制。

    • plot(y)
    • plot(y, '格式')
    • plot(x, y)
    • plot(x, y, '格式')
    • plot(x1, y1, '格式1', x2, y2, '格式2' …… xn, yn, 格式n)
    # 绘制一个点,点默认情况下是不显示的。如果需要让点能够显示,需要设置(marker参数可以设置点显示的形状)。
    # plt.plot(50, marker="d")
    
    # 绘制多个数据,构成线型形状。如果我们只提供一组数组,则该组数据表示纵坐标,横坐标默认从0开始,1,2,3,4进行排列。
    # plt.plot([3, 2, 9, 15, -3], marker="o")
    
    # 我们也可以自己来指定横坐标。提供两组数据。第1个列表指定横坐标,第2个列表指定纵坐标。
    # plt.plot([-3, -1, 5, 8, 12], [2, -10, 9, 3, 6], marker="o")
    
    # 我们在绘制图形的时候,可以指定点的形状,线的形状,线条颜色等设置。
    # plt.plot([-3, -1, 5, 8, 12], [2, -10, 9, 3, 6], "y-.>")
    
    # 绘制多个数据,每个数据给予不同的格式。
    # plt.plot([-3, -9], [32, 18], "r--D", [5, 8], [-10, 20], "g-.o")
    
    # 以上的方式,我们也可以分成两步来进行绘制。
    plt.plot([-3, -9], [32, 18], "r--D")
    plt.plot([5, 8], [-10, 20], "g-.o")
    [<matplotlib.lines.Line2D at 0x1c986a6d080>]
     
     

    图形交互式设置

    我们可以设置jupyter notebook图形是否交互式显示,默认为否。

    • %matplotlib 引擎名
    • %matplotlib inline
    # %matplotlib qt
    %matplotlib inline
    plt.plot([5, 8], [-10, 20], "g-.o")
    [<matplotlib.lines.Line2D at 0x20f80f3e0b8>]
     

    设置中文支持

    matplotlib默认情况下不支持中文显示,如果需要显示中文,则我们需要做一些额外的设置操作。设置可以分为:

    • 全局设置
    • 局部设置

    全局设置

    我们可以通过执行:
    mpl.rcParams["font.family"] = "中文字体名称"
    mpl.rcParams["axes.unicode_minus"]=False
    进行设置。常用的设置如下:

    • font.family 字体的名称
      • sans-serif 西文字体(默认)
      • SimHei 中文黑体
      • FangSong 中文仿宋
      • YouYuan 中文幼圆
      • STSong 华文宋体
      • Kaiti 中文楷体
      • LiSu 中文隶书
    • font.style 字体的风格
      • normal 常规(默认)
      • italic 斜体
      • oblique 倾斜
    • font.size 字体的大小(默认10)
    • axes.unicode_minus 是否使用Unicode的减号(负号)【在支持中文显示状态下,需要设置为False】

    局部设置

    在需要显式的文字中,使用fontproperties参数进行设置。

    说明:

    • 如果全局设置与局部设置冲突,以局部设置为准。
    # 对字体进行设置。默认的字体不支持中文显示,我们只需设置一种支持中文显示的字体即可。
    mpl.rcParams["font.family"] = "Kaiti"
    # 对于西方文字,使用普通的负号来显示,无需设置该选项。当设置支持中文的字体时,会使用Uniocde的负号来进行显示(不支持)。故需要将
    # 负号显示成普通的形式,而不是使用Unicdoe的负号显示。
    mpl.rcParams["axes.unicode_minus"] = False
    mpl.rcParams["font.style"] = "normal"
    mpl.rcParams["font.size"] = 10
    plt.plot([-3, -2],[-1, -5], "r--")
    # 显示标题
    plt.title("中文")
    
    # 局部设置
    plt.title("中文", fontproperties="Kaiti", fontsize=20)
    Text(0.5, 1.0, '中文')
     
     

    保存图表

    通过plt的savefig方法将当前的图形保存到硬盘或者类文件对象中。

    • dpi:每英寸分辨率点数。
    • facecolor:设置图像的背景色。
    • bbox_inches:设置为tight,可以紧凑保存图像。
    • # savefig图表保存
      # 1 保存到硬盘上
      plt.plot([1, 5, 8, 10], [2, 3, 9, 6], "r-.o")

      plt.savefig("./1.png", dpi=100, facecolor="g", bbox_inches="tight") # 2 保存到类文件对象中 # from io import BytesIO # data = BytesIO() # plt.savefig(data) # data.read() # data.getvalue()[:100] from PIL import Image # 从硬盘读取文件 image = Image.open("./1.png") # 从类文件对象中读取信息 # image = Image.open(data) image.show()

    颜色,点标记与线型设置

    我们可以在绘制图形时,显式指定图形的颜色,点标记或线条形状。具体设置可以查看帮助文档。

    • color(c):线条颜色。
    • linestyle(ls):线条形状。
    • linewidth(lw):线宽。
    • marker:点标记形状。
    • markersize(ms):点标记的大小。
    • markeredgecolor(mec):点边缘颜色。
    • markeredgewidth(mew):点边缘宽度。
    • markerfacecolor(mfc):点的颜色。

    说明:

    • 颜色,点标记与线型可以使用一个参数进行设置。
    • 颜色除了可以使用预设简写的字符之外,也可以使用全称(例如red)也可以使用RGB颜色表示。
    # plt.plot([1, 2, 3, 4], [5, 6, 7, 8], "ro--")
    plt.plot([1, 2, 3, 4], [5, 6, 7, 8], c="r", ls="--", lw=2, marker="o", ms=15, mec="r", mew=5, mfc="y")
    [<matplotlib.lines.Line2D at 0x1c986f302b0>]
     

    透明度设置

    在绘制图像时,我们可以通过alpha参数来控制图像的透明度,值在0 ~ 1之间。0为完全透明,1为不透明。

     
    plt.plot(np.arange(30), marker="D", alpha=0.7)
    [<matplotlib.lines.Line2D at 0x20f80f6ab00>]
     
     

    图例设置

    在绘制多条线时,可以设置图例来标注每条线所代表的含义,使图形更加清晰易懂。
    可以采用如下的方式设置图例:

    • 调用plt的legend函数,传递一个标签数组,指定每次plot图形的标签。
    • 在绘制的时候通过label参数指定图例中显示的名称,然后调用legend函数生成图例。

    legend常用的参数:

    • loc:指定图例的位置。默认为best。也可以指定坐标(元组),基于图像左下角计算。
    • frameon:设置是否含有边框。
    • title:设置图例的标题。
    • ncol:图例显示的列数,默认为1。
    # 可以采用两种方式。
    # plt.legend设置显示图例。
    
    # 1 第一中方式,绘图时不指定标签,而在legend方法中指定标签。
    plt.plot(list(range(1, 13)), np.random.randint(50, 100, 12))
    plt.plot(list(range(1, 13)), np.random.randint(50, 100, 12))
    # loc 控制图例的显示位置,默认为best,即选择一个最好的位置。
    plt.legend(["2016", "2017"], loc="upper right")
    
    # legend也可以指定元组的坐标。(坐标的值基于当前图形的比例。)
    # plt.legend(["2016", "2017"], loc=(0.6, 0.5))
    # frameon是否显示图例的边框,True(默认值)显示,False不显示。
    # plt.legend(["2016", "2017"], loc="best", frameon=False)
    # plt.legend(["2016", "2017"], loc="best", title="年降雨量", ncol=2)

    # 2 第2种方式:在绘图时指定标签,在legend中不指定。
    # 通过label参数指定标签信息。该信息可以用来当做legend的图例标签。
    plt.plot(list(range(1, 13)), np.random.randint(50, 100, 12), label="2016")
    plt.plot(list(range(1, 13)), np.random.randint(50, 100, 12), label="2017")
    plt.legend(loc="best")

    网格设置

    可以通过plt的grid方法来设置是否显示网格。True为显示,False不显示。ax.grid(color='r', linestyle='-', linewidth=2)

    • color:设置网格线颜色
    • axis:设置网格线显示x,y或者全部显示(x,y,both)。
    • linestyle:设置网格线形状。
    • linewidth:设置网格线宽度。
    plt.plot([1, 2], [3, 4])
    plt.grid(True, color="y", axis="y", ls="--", lw=5)

    绘图区域设置

    我们可以在一张图上绘制多个图形,当然,我们也可以将不同的图形绘制到多个不同的区域当中。
    我们可以采用以下方式来实现多个区域的绘制(创建子绘图区域):

    • 通过Figure对象调用add_subplot方法。
    • 通过plt的subplot方法。
    • 通过plt的subplots方法。
     

    子区域1:add_subplot方法

    • 首先创建matplotlib.figure.Figure对象,然后通过Figure对象的add_subplot方法增加子绘图区域。
    • add_subplot方法中,需要指定子区域的行数、列数与当前要绘制的子区域。
    • add_subplot方法会返回子绘图对象(轴对象),通过该对象即可实现绘图(matplotlib.axes._subplots.AxesSubplot)。

    在绘制图形时,总是需要创建Figure对象。如果没有显式创建,则plt会隐式创建一个Figure对象。在绘制图形时,既可以使用plt来绘制,也可以使用子绘图对象来绘制。
    如果使用plt对象绘制,则总是在最后创建的绘图区域上进行绘制,如果此时尚未创建绘图区域,则会自动创建。

    说明:

    • add_subplot方法的参数,即可以使用三个参数分开传递,也可以使用一个参数整体传递。
    • 可以通过plt.subplots_adjust方法来调整子绘图的位置与子绘图之间的距离。(left, right, top, bottom, wspace, hspace)
    • 创建子区域时,可以使用facecolor设置绘图区域的背景色。
    # 创建Figure对象。在我们进行绘图时,一定会存在Figure对象,如果我们没有显式创建,也会隐式创建。
    figure = plt.figure()
    # 创建一个子绘图区域,分别指定行数(第1个参数),列数(第2个参数),当前的自绘图区域(第3个参数)。
    figure.add_subplot(1, 2, 1, facecolor="g")
    plt.plot(10, marker="o")
    # 三个参数也可以作为一个参数整体传递
    figure.add_subplot("122")
    # figure.add_subplot(1, 2, 2)
    plt.plot(20, marker="d")
    
    # 在调用add_subplot方法时,会返回所创建的子绘图区域对象。我们既可以通过plt.plot进行绘制,也可以通过子绘图区域的plot方法
    # 进行绘制。
    # sub = figure.add_subplot(1, 2, 1)
    # sub.plot([1, 2, 3], [5, 6, 8], "g")
    # 当我们使用plt.plot进行绘制时,总是在最后激活(创建)的子绘图区域上进行绘制。 
    # sub2 = figure.add_subplot(1, 2, 2)
    # plt.plot([3, 8, 9], [12, 9, 0], "y")
    
    # 调整水平的间距。
    plt.subplots_adjust(wspace=1)

    子区域2:subplot方法

    通过调用plt的subplot方法创建子绘图区域,该方法返回子绘图对象。此处方式下,会隐式创建Figure对象。
    实际上,这种创建子绘图区域的方式,底层也是通过第一种方式实现的。

    #subplot(行, 列, 当前位置)
    plt.subplot(1, 2, 1)
    plt.plot([3, 8, 3], "g--d")
    
    plt.subplot(1, 2, 2)
    plt.plot([3, 8, 9], "r-.o")

    子区域3:subplots方法

    通过plt的subplots方法创建子绘图区域,该方法返回一个元组(Figure对象与所有子绘图对象,如果是多个子绘图对象,则返回一个ndarray数组)。可以通过sharex与sharey来指定是否共享x轴与y轴。

    # 返回元组, 第1个元素,Figure对象,第2个元素:子绘图区域对象。
    # 如果我们创建多个子绘图区域对象,则多个子绘图区域对象会存放在ndarray中。
    figure, ax = plt.subplots(2, 2, sharex=True, sharey=True)
    
    ax[0][0].plot([3, 9])
    ax[0][1].plot([3, 9])
    ax[1][0].plot([3, 9])
    ax[1][1].plot([3, 9])

    绘图区域大小设置

    如果绘图子区域较多,可能会有些拥挤。此时,我们可以调整绘图区域的大小。方式如下:

    • 在调用plt.figure()创建Figure对象时,通过figsize参数指定。单位为英寸。
    • 在创建Figure对象后,可以通过Figure对象的set_size_inches方法设置。

    说明:

    • 如果没有显式创建Figure对象,可以通过plt的gcf函数获取当前的Figure对象。
    # 在创建Figure对象时,通过figsize参数指定绘图区域的大小。
    # plt.figure(figsize=(3, 3))
    
    # 我们也可以在创建Figure对象之后,通过set_size_inches来设置区域大小。
    # figure = plt.figure()
    # figure.set_size_inches(5, 5)
    # plt.plot([1, 2, 4])
    # 获取当前的figure对象。
    # 如果没有显式创建Figure对象,我们可以通过plt.gcf获取当前使用的figure,同样可以设置绘图区域的大小。
    figure2 = plt.gcf()
    # display(figure is figure2)
    figure2.set_size_inches(5, 5)
    plt.plot([1, 2, 3])

    标签与刻度设置

    可以通过plt对象的相关方法来设置(或获取)标签与刻度等信息。设置还是获取,取决于是否传递实际参数。

    • plt.xlim 设置或获取x轴刻度范围。
    • plt.ylim 设置或获取y轴刻度范围。
    • plt.xticks 设置或获取x轴显示的刻度与标签。
    • plt.yticks 设置或获取y轴显示的刻度与标签。
    • plt.axis 可以同时设置或获取x与y轴的刻度范围,或者是取消刻度显示。
      • 无参数:返回一个元组。(xmin, xmax, ymin, ymax)
      • (xmin, xmax, ymin, ymax) 同时设置x与y轴的刻度范围。
      • off 取消坐标轴显示。
      • tight:坐标轴紧凑显示。
      • equal:x与y具有同样的长度。

    轴标签说明与标题设置

    • plt.xlabel 设置x轴的标签说明。
    • plt.ylabel 设置y轴的标签说明。
    • plt.title 设置标题。
    plt.plot([1, 3, 5], [2, 4, 6])
    # 显示x轴刻度的范围
    display(plt.xlim())
    # 显示y轴刻度的返回
    display(plt.ylim())
    # 除了获取之外,我们也可以去设置x与y轴的刻度范围。
    plt.xlim(0, 10)
    plt.ylim(-2, 10)
    # 获取x与y的刻度信息。
    # plt.xticks()
    # plt.yticks()
    
    # 设置x与y的刻度信息
    plt.xticks([0, 5, 10])
    plt.yticks([-2, 4, 10])
    
    # 默认情况下,标签就是我们设置的刻度信息。我们可以自定义每个刻度的显示标签。
    plt.xticks([0, 5, 10], ["偏低", "中等", "偏高"])
    (0.8, 5.2)
     
    (1.8, 6.2)
    ([<matplotlib.axis.XTick at 0x1c98824cd30>,
      <matplotlib.axis.XTick at 0x1c98824c7f0>,
      <matplotlib.axis.XTick at 0x1c98824c518>],
     <a list of 3 Text xticklabel objects>)
     
     
    # axis的使用
    # plt.plot([1, 3, 5], [2, 4, 6])
    # 可以通过axis来设置或者返回x与y轴的界限。
    # 获取 
    plt.axis()
    # 设置 (xmin, xmax, ymin, ymax)
    # plt.axis((0, 10, -5, 10))
    # 去掉坐标轴
    # plt.axis("off")
    
    plt.plot([1, 2, 3], [1, 10, 20])
    # 让x与y轴具有相同的增长度(比例相同)
    # plt.axis("equal")

    # 设置坐标轴的标签与标题
    plt.plot([1, 2, 3])
    # 设置x轴的标签信息
    plt.xlabel("这是x轴")
    plt.ylabel("这是y轴")
    # 设置标题信息
    plt.title("这是标题")
    Text(0.5,1,'这是标题')
     

    通过绘图对象设置

    除了通过plt对象外,我们还可以通过子绘图对象来设置与获取标签与刻度。

    • ax.set_xlim 设置x轴刻度范围。
    • ax.get_xlim 获取x轴刻度范围。
    • ax.set_xticks 设置x轴显示的刻度。
    • ax.get_xticks 获取x轴显示的刻度。
    • ax.set_xticklabels 设置x轴显示的刻度标签。默认显示的是就是刻度值。
    • ax.get_xticklabels 获取x轴显示的刻度标签。

    也可以设置标签说明与标题。

    • ax.set_xlabel 设置x轴的标签说明。
    • ax.get_xlabel 获取x轴的标签说明。
    • ax.set_title 设置标题。
    • ax.get_title 获取标题。

    说明:

    • 如果需要设置或者获取y轴,只需要将x换成y即可。
    # 除了使用plt进行设置刻度,坐标轴,标签等信息外,我们也可以通过绘图对象来进行设置。
    figure, ax = plt.subplots(1, 1)
    ax.plot(np.random.random(100))
    # 设置x轴的显示范围
    # ax.set_xlim(0, 120)
    # 获取x轴的显示范围
    # ax.get_xlim()
    # ax.get_xticks()
    ax.set_xticks([50, 100, 150])
    ax.set_xticklabels(["", "", ""])
    # for i in ax.get_xticklabels():
    #     display(i)
    ax.set_xlabel("时间")
    ax.set_ylabel("数值大小")
    # ax.get_xlabel()
    ax.set_title("波动值")
    ax.get_title()
    '波动值'
     
     

    添加注解

    我们可以在图形上绘制文本等说明信息(注解)。

    普通文本

    plt.text 显示文本(基于坐标)
    plt.figtext 显示文本(基于图片)

    箭头

    plt.arrow 根据起点坐标(x,y)与各自轴的长度(x + dx, y + dy)绘制箭头。

    • width 箭头尾部的宽度。
    • head_width 箭头的宽度。
    • head_length 箭头的长度。

    箭头与文本

    plt.annotate 显示箭头与文本。

    • xy 箭头指向坐标
    • xytext 文本起点坐标。(箭头尾部坐标)
    • arrowprops 字典类型,可设置箭头的属性。
      • facecolor 箭头的颜色
      • headwidth 箭头的宽度
      • width 箭尾的宽度
      • shrink 收缩大小
      • headlength 箭头的长度
      • arrowstyle 一些预设的箭头样式。当含有该参数时,上述4项参数将不再有效。
    x = np.linspace(-10, 10, 100)
    plt.plot(x, x ** 2, "-")
    plt.title("抛物线图")
    # 在指定的坐标位置增加文字说明。
    # plt.text(0.5,0, "这是极值点")
    # plt.text与plt.figtext都可以进行文字说明,不同的是,text是基于坐标定位,而figtext是基于比例定位(左下角为原点)。
    # plt.figtext(0.5, 0.5, "说明")
    # plt.arrow(7, 20, -5.5, -15, width=1, head_width=4, head_length=4, color="r")
    # plt.text(8, 25, "这是极值点")
    
    # 使用text与arrow可以实现箭头与文本的说明。我们可以使用plt.annotate可以将箭头与说明文本一同绘制。
    # plt.annotate("这是极值点", xy=(0, 0), xytext=(8, 25), arrowprops=dict(width=3, facecolor="g", headwidth=15, shrink=0.05, headlength=25))
    
    plt.annotate("这是极值点", xy=(0, 0), xytext=(8, 25), arrowprops=dict(arrowstyle="<-"))
    Text(8, 25, '这是极值点')
     

    图形类型

    折线图

    plt.plot

    # 适合于具有增长趋势的数据表达
    plt.plot(np.arange(1, 13), np.random.randint(50, 100, 12), "-o")

    柱形图 / 条形图

    plt.bar 柱形图
    plt.barh 条形图

    # 柱形图/条形图适合进行数据数值的对比(比较大小)。
    
    # 绘制柱形图
    # plt.bar(["A公司", "B公司", "C公司"], [200, 100, 135])
    # 绘制条形图
    plt.barh(["A公司", "B公司", "C公司"], [200, 100, 135])
    <BarContainer object of 3 artists>
     
     

    饼图

    plt.pie 饼图

    • labels 每个部分显示的标签。
    • explode 指定每个部分距离圆心的偏移量(单位为半径的长度)。
    • colors 指定每个部分的颜色。
    • autopct 设置每个部分显示的比例值(格式化)。
    • couterclock 是否逆时针绘图。默认为True。
    • startangle 初始绘图点位置(逆时针偏移x轴的角度)。默认为偏移0度(x轴)。
    • shadow 是否含有阴影,默认为False。
    # 饼图适合于进行比例的对比。(注意:使用饼图时,参与对比的数据不宜过多。)
    
    plt.pie([10, 30, 20, 50, 40], labels=["销售1部", "销售2部", "销售3部", "技术1部", "技术2部"], explode=[0, 0, 0, 0, 0.2])
    # plt.pie([10, 30, 20, 50, 40], labels=["销售1部", "销售2部", "销售3部", "技术1部", "技术2部"], colors=["r", "g", "b", "y", "b"])
    # plt.pie([10, 30, 20, 50, 40], labels=["销售1部", "销售2部", "销售3部", "技术1部", "技术2部"],autopct="%.2f%%")
    # plt.pie([10, 30, 20, 50, 40], labels=["销售1部", "销售2部", "销售3部", "技术1部", "技术2部"],counterclock=False)
    # plt.pie([10, 30, 20, 50, 40], labels=["销售1部", "销售2部", "销售3部", "技术1部", "技术2部"], startangle=90)
    # plt.pie([10, 30, 20, 50, 40], labels=["销售1部", "销售2部", "销售3部", "技术1部", "技术2部"],shadow=True)
    ([<matplotlib.patches.Wedge at 0x1c9883cfc18>,
      <matplotlib.patches.Wedge at 0x1c9883d91d0>,
      <matplotlib.patches.Wedge at 0x1c9883d96a0>,
      <matplotlib.patches.Wedge at 0x1c9883d9b70>,
      <matplotlib.patches.Wedge at 0x1c9883e4080>],
     [Text(1.075962358309037, 0.22870287165240302, '销售1部'),
      Text(0.5499999702695115, 0.9526279613277875, '销售2部'),
      Text(-0.5500000594609755, 0.9526279098330699, '销售3部'),
      Text(-1.004899951743044, -0.44741042342219545, '技术1部'),
      Text(0.8698699721849806, -0.9660881075196512, '技术2部')])
     
     

    散点图 / 气泡图

    散点图适合于用来显示与比较数据的分布状态。

    • marker 点的标记。
    • s 点的大小。
    • color 点的颜色。

    说明:

    • color与s参数可以统一设置,也可以为每一个点单独设置。
    # 散点图/气泡图适合于表示数据的分布情况。
    # 散点图用来表示两个维度的数据,如果数据维度超过2维,我们可以使用气泡图表示。【增加气泡的大小,颜色,多表示两个维度】
    
    plt.scatter(np.random.randint(0, 100, 100), np.random.randint(0, 100, 100), marker="o", s = 30, c="g")
    # plt.scatter([1, 5, 8], [8,2, 6], s=[30, 100, 60], c=["r", "g", "b"])

    直方图

    直方图(histogram)可以看成是一种特殊的柱形图,用来将连续的数据频率(数量)进行离散化显示。在直方图中,数据被分割成若干区间,然后统计每个区间数据出现的频率(数量)。
    我们可以通过plt.hist来绘制直方图。

      • bins:设置分割区间的数量。
      • normed:进行归一化显示。(概率密度)
      • # 直方图适用于将连续型变量(多离散型)切分成离散型表示。
        
        
        # x = np.random.randint(0, 101, 200)
        # 默认情况下,直方图会划分成10等分区间。
        # 区间的划分原则:左闭右开原则。(包含起始点,不包含终止点。)例外:最后一个区间,双闭区间。(包含起始点,也包含终止点。)
        # plt.hist(x)
        # 如果需要自定义区间数量(等分数量:桶的数量),我们可以通过bins进行控制。
        # plt.hist(x, bins=5)
        # bins参数,除了指定一个标量(区间桶的数量)之外,我们也可以传递一个数组。数组指定我们自定义划分的界限。
        # plt.hist(x, bins=[0, 10, 50, 100])
        
        # 正态分布
        x = np.random.randn(200)
        plt.hist(x, bins=8)
        (array([ 6., 14., 17., 48., 51., 36., 19.,  9.]),
         array([-2.89321226, -2.25176974, -1.61032721, -0.96888469, -0.32744217,
                 0.31400035,  0.95544287,  1.5968854 ,  2.23832792]),
         <a list of 8 Patch objects>)
         
         

        箱线图

        箱线图也称盒须图。通过极值与Q1,Q2,Q3值来描述数据。

        通过箱线图,我们可以发现数据中的离群(异常)值。 箱线图的离群点定义为:Q3+1.5IQR和Q1-1.5IQR。其中IQR为两个四分位之间的距离。

        # 使用箱线图能够方便我们进行离群点的检测。(发现可能的异常值。)
        
        a = [2, 3, 5, 1, 4, 2, 6]
        # df = pd.DataFrame(a)
        # display(df)
        # df.describe()
        plt.boxplot([2, 3, 5, 1, 4, 2, 9])
        {'whiskers': [<matplotlib.lines.Line2D at 0x1c986f57358>,
          <matplotlib.lines.Line2D at 0x1c986f576a0>],
         'caps': [<matplotlib.lines.Line2D at 0x1c986f579e8>,
          <matplotlib.lines.Line2D at 0x1c986f57d30>],
         'boxes': [<matplotlib.lines.Line2D at 0x1c988466ef0>],
         'medians': [<matplotlib.lines.Line2D at 0x1c986f57e10>],
         'fliers': [<matplotlib.lines.Line2D at 0x1c986f5b400>],
         'means': []}
         
         

        Series与DataFrame图形绘制

        Series与DataFrame类型的对象也支持图形绘制,使用对象的plot方法即可。
        如果我们需要绘制图形的数据就存在Series或者DataFrame对象中,我们就可以直接绘制,而无需使用plt.plot。

         

        其他类型图形

        plot默认绘制的是线形图,我们可以通过调整其kind参数的值来绘制其他类型的图形。

        • line:线形图
        • bar:柱形图
        • barh:条形图
        • hist:直方图
        • kde / density:核密度图
        • pie:饼图
        • box:箱线图
        • area:面积图

        参数:

        • color
        • alpha
        • stacked:是否堆叠。

        说明: plot(kind="类型")也可以通过plot."类型"来进行绘制。

         
        # s = pd.Series([1, 3, 8, 10, 12])
        # s.plot(kind="line", marker="o", color="g")
        # s.plot.line()
        # s.plot(kind="bar")
        # s.plot(kind="barh")
        # s.plot.barh()
        # s.plot(kind="hist")
        # s.plot(kind="kde")
        # s.plot(kind="density")
        # s.plot(kind="pie")
        # s.plot(kind="box")
        # s.plot(kind="area", alpha=0.5)
        df = pd.DataFrame({"A":[10, 5, 8, 7], "B":[12, 11, 3, 6]})
        display(df)
        # df.plot(kind="line")
        # 进行堆叠
        # df.plot(kind="bar", stacked=True)
        # df.plot(kind="barh", stacked=True)
        # df.plot(kind="hist")
        # df.plot(kind="kde")
        # DataFrame在绘制饼图的时候,需要指定y或subplots=True。
        # y指定列索引。(要绘制哪一个列)
        # df.plot(kind="pie", y="B")
        # 如果DataFrame中的每个列都需要绘制饼图,可以使用subplots=True,这样,就可以将每个列在各自的子绘图区域中绘制饼图。
        # df.plot(kind="pie", subplots=True)
        # 每个列绘制一个箱线图。
        # df.plot(kind="box")
        df.plot(kind="area")

  • 相关阅读:
    Perl 基础笔记: 使用 cpanm 安装 Perl 模块
    修改CPAN安装源
    JQUERY实现点击INPUT使光标移动到最后或指定位置
    新手入门Underscore.js 中文(template)
    深入浅出C/C++中的正则表达式库
    [libxml2]_[XML处理]_[使用libxml2的xpath特性修改xml文件内容]
    Mysql事务的隔离级别
    HBase基础知识摘要
    java如何实现一个Future
    遇到过的问题整理-大量页面监控问题
  • 原文地址:https://www.cnblogs.com/lqerio/p/11168667.html
Copyright © 2020-2023  润新知