Python数据可视化(几个基本方法)

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

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


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()
从零开始学Python可视化(二):统计图形入门

参数:

  • 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()
从零开始学Python可视化(二):统计图形入门

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()
从零开始学Python可视化(二):统计图形入门

参数:

  • 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:我们可以用一个列表指定不同分类的颜色ß
从零开始学Python可视化(二):统计图形入门

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()
从零开始学Python可视化(二):统计图形入门

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

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

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

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

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

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()
从零开始学Python可视化(二):统计图形入门

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

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

Leave a Comment