美文网首页Python可视化Python可视化数据可视化
从零开始学Python可视化(二): 统计图形入门

从零开始学Python可视化(二): 统计图形入门

作者: 老Q在折腾 | 来源:发表于2018-11-26 11:47 被阅读45次

    折线图和散点图常用且实用,但是并不能满足我们的作图需求。

    这次我们会尝试更多常见的统计图形,比如条形图、直方图、饼图等,我们的目标是掌握工作学习过程中使用最频繁的图形技能。


    欢迎大家关注我的个人博客【数洞】 【备用站】

    1. 柱状图(条形图) —— bar() / barh()

    柱状图又叫条形图,用于绘制定性(分类)数据的分布特征,比如不同国家的GDP、不同年龄段的平均体重等。这次,我们以一组学生的身高来演示它的作图方法。

    import matplotlib.pyplot as plt
    
    # 生成数据
    x = [1, 2, 3, 4, 5, 6, 7, 8]
    y = [176, 165, 188, 150, 170, 180, 172, 160]
    
    # 画柱状图
    plt.bar(x, y, 
            align = 'center', 
            color = 'c', 
            tick_label = ['q', 'a', 'c', 'e', 'r', 'j', 'b', 'p'], 
            hatch = '/')
    
    # 设置轴标签
    plt.xlabel('学生编号')
    plt.ylabel('身高(cm)')
    
    plt.show()
    
    image

    参数:

    • align:对齐方式,即条形相对于刻度的位置
    • color:颜色
    • tick_label:刻度的标签
    • hatch:填充

    我们还可以使用barh画水平(horizontal)方向的条形图,它们两个函数的参数基本一致,只是我们要将xlabel和ylabel的值对调一下(注意:x和y不需要对调):

    import matplotlib.pyplot as plt
    
    # 生成数据
    x = [1, 2, 3, 4, 5, 6, 7, 8]
    y = [176, 165, 188, 150, 170, 180, 172, 160]
    
    # 画柱状图
    plt.barh(x, y, 
            align = 'center', 
            color = 'c', 
            tick_label = ['q', 'a', 'c', 'e', 'r', 'j', 'b', 'p'], 
            hatch = '/')
    
    # 设置轴标签
    plt.xlabel('身高(cm)')
    plt.ylabel('学生编号')
    
    plt.show()
    
    image

    2. 直方图 —— hist()

    直方图跟条形图很像,但是直方图是用于表现定量数据的分布,比如说中国人口的年龄分布情况、一所高中高三所有学生的高考成绩的分布情况等。跟bar()barh()不同的是,hist()函数输入的只有一组数据,在输出的图形中,横坐标对应着不同的分组,纵坐标则对应着该组的计数。

    import matplotlib.pyplot as plt
    import numpy as np
    
    # 生成数据
    x = np.random.randint(0, 10, 500)
    
    # 直方图
    plt.hist(x,
            bins = range(0, 11),
            color = 'g',
            histtype = 'bar', 
            rwidth = 0.95,
            alpha = 0.6)
    
    # 设置轴标签
    plt.xlabel('分组')
    plt.ylabel('计数')
    
    plt.show()
    
    image

    参数:

    • bins:如果参数是一个整数,则相当于我们制定了分桶的数量,如果参数是一个列表,则相当于我们指定了每个分桶的边界。
    • histtype:分桶样式
    • rwidth:相对宽度,即每个柱子宽度相对于两个刻度之间宽度的比例。
    • alpha:透明度

    3. 饼图 —— pie()

    饼图主要用于绘制不同类型的百分比,比如不同国家的人口占比、一个员工的薪资构成等。我们假设有ABCD四个公司,他们瓜分了一块市场,我们用饼图来将他们的市场占有情况表现出来:

    import matplotlib.pyplot as plt
    import numpy as np
    
    # 生成数据
    ratio = [0.1, 0.4, 0.35, 0.15]
    labels = ['A', 'B', 'C', 'D']
    
    # 直方图
    plt.pie(ratio, labels=labels, autopct='%3.1f%%', startangle=90)
    
    # 设置轴标签
    plt.title('不同公司市场占比')
    
    plt.show()
    

    参数:

    • labels: 类别标签/名称
    • autopct:饼图种比例数字的格式
    • startangle:起始角度,默认会逆时针从水平0度角开始排列
    • color:我们可以用一个列表指定不同分类的颜色ß
    image

    4. 极线图 —— polar()

    这一函数用于在极坐标轴上绘制折线图。

    import matplotlib.pyplot as plt
    import numpy as np
    
    # 生成数据
    theta = np.linspace(0, 2*np.pi, 12, endpoint=False)
    r = np.random.rand(12)
    
    # 极线图
    plt.polar(theta, r,
             color = 'chartreuse',
             linewidth = 2,
             marker = '*',
             mfc = 'b',
             ms = 10)
    
    plt.show()
    
    image

    5. 散点图 —— scatter()

    我们在之前已经接触过散点图了,但是这次我们将展示更强大的散点图。

    import matplotlib.pyplot as plt
    import matplotlib as mpl
    import numpy as np
    
    # 生成数据
    x = np.random.randn(100)
    y = np.random.randn(100)
    
    # 散点图
    plt.scatter(x, y,
               s = np.power(10*x+20*y, 2),
               c = np.random.rand(100),
               cmap = mpl.cm.RdYlBu,
               marker = 'o',
               alpha = 0.3)
    )
    
    plt.show()
    

    我们指定了横纵坐标的数据、每个点的大小、每个点的颜色以及浮点数到颜色的映射表、标记的形状以及透明度,看,通过这种方式,我们可以对多维数据进行可视化。

    image

    6. 杆图 —— stem()

    刘大成先生在《Python数据可视化之matplotlib实践》一书中将其翻译为棉棒图,挺形象的,但是我还是强行使用了杆图的名字,虽然这个名字简直难听到了天际……

    杆图用于绘制离散而有序的数据,在图中,这些离散的点会分布在一条基线的上下两侧,我们可以直观地感受到它们的波动趋势以及分布情况。

    import matplotlib.pyplot as plt
    import numpy as np
    
    # 生成数据
    x = np.linspace(0, 10, 20)
    y = np.random.randn(20)
    
    # 绘图
    plt.stem(x, y, linefmt='-.', markerfmt='o', basefmt='-')
    
    plt.show()
    

    参数:

    • linefmt:离散点到基线的垂线的样式
    • markerfmt:离散点的样式
    • basefmt:基线的样式

    这里fmt是format的简写。

    image

    7. 箱线图 —— boxplot()

    箱线图是非常经典、实用且常用的一种用于观察连续数据分布的图形,它能清晰地展示出数据的上下四分位数、上下边缘、中位数的位置,还能根据规则帮助我们确定一些异常值,是观察数据分布的一大利器。

    import matplotlib.pyplot as plt
    import numpy as np
    
    # 生成数据
    x = np.random.randn(1000)
    
    # 绘图
    plt.boxplot(x)
    
    # 添加网格
    plt.grid(axis='y', ls=':', lw=1, color='gray', alpha=0.4)
    
    plt.show()
    
    image

    8. 误差棒图 —— errorbar()

    此函数用于绘制y轴方向或者x轴方向的误差范围:

    import matplotlib.pyplot as plt
    import numpy as np
    
    # 生成数据
    x = np.linspace(0, 1, 10)
    y = np.exp(x)
    
    # 绘图
    plt.errorbar(x, y, fmt=':og', yerr=np.power(x, 2), xerr=0.02)
    
    plt.show()
    

    这里我们使用横坐标的平方作为y轴方向上的误差,同时使用一个常数0.02作为x轴方向上的误差。在fmt(format)参数下,我们使用':og'将线条设置为虚线、将数据点设置为大圆点、将颜色设置为绿色。

    image

    好了,以上就是今天要分享的几种常用的统计图形,今天我们的目标就是掌握这些图形对应的函数的基本调用,后边我们会详细探索它们在实际的数据分析过程中的应用。

    相关文章

      网友评论

        本文标题:从零开始学Python可视化(二): 统计图形入门

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