Matplotlib 绘图

大家可以先根据我们网站自学。

如果自学速度慢、难点搞不定,欢迎来报 `实战班` 学习。
白月黑羽 1对1 直播讲解答疑,大量练习实战,学习效果是自学没法比的。

点击这里查看实战班介绍 咨询微信:18502556834

Matplotlib 提供非常全面的数据可视化功能。

安装

非常简单,直接 执行 pip install matplotlib 即可

简单示例

下面的代码,运行一下看看

import matplotlib.pyplot as plt

# 如果只传入一个数组作为参数, matplotlib 认为是 Y 轴的坐标
# 并自动产生 从 0 开始的 对应 X 轴坐标: 0、1、2、3 ...
plt.plot([2, 4, 6, 8])
plt.ylabel('some numbers')
plt.show()

当然,我们也经常需要 同时指定 作图点的 X 坐标 和 Y 坐标

import matplotlib.pyplot as plt

# 绘图点的 X 轴 坐标依次为 1, 3, 5, 7
# 绘图点的 Y 轴 坐标依次为 2, 4, 6, 8
plt.plot([1, 3, 5, 7], [2, 4, 6, 8])
plt.ylabel('some numbers')
plt.show()

可以在一幅图上,画多组数据,如下所示

import matplotlib.pyplot as plt

# 画一组数据
plt.plot([1, 2, 3, 4], [1, 4, 9, 16])
# 再画一组数据
plt.plot([1, 2, 3, 4], [1, 3, 5, 8])
plt.show()

显示中文字符

matplotlib的缺省字体不支持中文,我们可以指定一个支持中文的字体

import matplotlib.pyplot as plt

plt.rcParams['font.family'] = 'sans-serif'
# 设定字体为微软雅黑
plt.rcParams['font.sans-serif']=['Microsoft Yahei']

plt.plot([1, 2, 3, 4])
plt.xlabel('times 次数')
plt.show()

显示格式

给定了xy坐标作为 plot 的前两个参数, 还可以有可选的第三个参数,表示数据绘制的风格,缺省值为 b-

b 表示 蓝色, - 表示 是线图。

如果想显示红色点图,就是 风格参数 r.r 代表红色, . 代表点, 如下

import matplotlib.pyplot as plt

plt.plot([1, 2, 3, 4], [1, 4, 9, 16], 'r.')
plt.show()

完整的 风格参数定义,点击这里参考官方文档

指定宽度

我们可以 使用参数 linewidth 指定绘图的线条宽度

import matplotlib.pyplot as plt

plt.plot(range(10), range(10), linewidth=0.5)
plt.show()

我们可以 使用参数 markersize 指定点的大小

import matplotlib.pyplot as plt

plt.plot(range(10), range(10), 'r.', markersize=2.5)
plt.show()

numpy 数组

其实 matplotlib 内部都是把作图数据转化为 numpy 的 ndarray 数组类型进行处理的。

所以,我们当然可以,直接使用 numpy 的数组作为 画图数据

import matplotlib.pyplot as plt
import numpy as np

# arange 就像 Python中的range
# 从 0 到 5 步长为 0.2
t = np.arange(0, 5, 0.2)

# 使用 numpy 的ndarray 作为数据
plt.plot(t, t**2, 'b.')
plt.show()

柱状图

使用 bar 方法可以画柱状图

import matplotlib.pyplot as plt

names = ['2016', '2017', '2018']
values = [1, 10, 100]

plt.bar(names, values)
plt.show()

多个子图(axes)

subplot 方法可以用来创建多个子图(axes)。

前面的示例中,我们并没有创建子图,其实, matplotlib缺省会帮我们调用 plt.subplot(1,1,1) 指定 1行,1列,共1个子图,当前子图为第1个.

如果你想指定更多的子图,可以这样,

import matplotlib.pyplot as plt
import numpy as np

# arange 就像 Python中的range
# 从 0 到 5 步长为 0.2
t = np.arange(0, 5, 0.2)

# 指定2行,1列,共两个axe,当前使用第1个绘图块
plt.subplot(2,1,1)   
plt.plot(t, t**2, 'b.')


# 当前使用第2个绘图块
plt.subplot(2,1,2)   
plt.plot(t, t**2, 'r-')
plt.show()

结果如下:

image

多个绘图(figure)

前面我们并没有调用 figure指定绘图,其实缺省matplotlib会调用 plt.figure(1) 指定第一个绘图。

import matplotlib.pyplot as plt
plt.figure(1)                # the first figure
plt.subplot(211)             # the first subplot in the first figure
plt.plot([1, 2, 3])
plt.subplot(212)             # the second subplot in the first figure
plt.plot([4, 5, 6])


plt.figure(2)                # a second figure
plt.plot([4, 5, 6])          # creates a subplot(111) by default

plt.figure(1)                # figure 1 current; subplot(212) still current
plt.subplot(211)             # make subplot(211) in figure1 current
plt.title('Easy as 1, 2, 3') # subplot 211 title

plt.show()

结果如下,你可以发现有两个 figure

image

图形中的文字

import matplotlib.pyplot as plt
import numpy as np

mu, sigma = 100, 15
x = mu + sigma * np.random.randn(10000)

n, bins, patches = plt.hist(x, 50, density=1, facecolor='g', alpha=0.75)

# x轴标题
plt.xlabel('Smarts')
# y轴标题
plt.ylabel('Probability')
# 子图标题
plt.title('Histogram of IQ')
# 指定坐标处添加文本
plt.text(60, .025, r'$\mu=100,\ \sigma=15$')
plt.axis([40, 160, 0, 0.03])
plt.grid(True)
plt.show()

结果如下:

image

我们可以像这样,指定标题的颜色

t = plt.xlabel('my data', fontsize=14, color='red')
上一页
下一页