从零开始学matplotlib画图(二): 统计图形入门

版权声明:原创文章,未经允许不得转载。www.data-insights.cn. https://blog.csdn.net/qixizhuang/article/details/83067450

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

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


###############################################################################
#_____________________________________________________________________________#
#|      ______      ___    __________   ___      __                          |#
#|     /  __  \    /   |  /___   ___/  /   |    / /                          |#
#|    /  /  \  |  / /| |      /*      / /| |   / /      DataInsights         |#
#|   /  /   /  / / /_| |      `/     / / | |  / /                            |#
#|  /  /   /  / / ___  |     / `    / /  | | / /      [email protected]       |#
#| /  /___/  / / /   | | ___ `/__  / /   | |/ /                              |#
#|/_________/ /_/    |_|/________//_/    |___/    https://data-insights.cn/  |#
#|___________________________________________________________________________|#
###############################################################################

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()

参数:

  • 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()

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()

参数:

  • 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:我们可以用一个列表指定不同分类的颜色ß

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()

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()

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

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的简写。

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()

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’将线条设置为虚线、将数据点设置为大圆点、将颜色设置为绿色。

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

猜你喜欢

转载自blog.csdn.net/qixizhuang/article/details/83067450
今日推荐