《老鸟python 系列》视频上线了,全网稀缺资源,涵盖python人工智能教程,爬虫教程,web教程,数据分析教程以及界面库和服务器教程,以及各个方向的主流实用项目,手把手带你从零开始进阶高手之路!点击 链接 查看详情

matplotlib

阅读:1217954170    分享到

matplotlib 是一个用于在 python 中绘制数组的 2D 图形库。虽然它起源于模仿 MATLAB 图形命令,但它独立于 MATLAB,虽然 matplotlib 主要是在纯 python 中编写的,但它大量使用 numpy 和其他扩展代码,即使对于大型数组也能提供良好的性能。

matplotlib 的设计理念是,码农们只需要一个或几个命令就可以创建简单的图形,比如你想根据你的数据绘制出一个直方图,你不需要实例化对象,调用方法,设置属性等等,直接几行代码就会出来漂亮的效果。

当然,matplotlib 的画图功能是丰富的,我们不但能够用它轻松的画出折线图,直方图,功率谱图,散点图等常用图表,而且绘制其它复杂的图形也是轻车熟路。

matplotlib 初始化

我们在学习一个新的数据类型时,首先就是如何初始化它,类似于前面学习的 numpy 和 pandas,同样我们要想使用 matplotlib,首先就要先初始化它,我们知道 matplotlib 是根据数据画图的,我们可以用 list、tuple、dict、numpy、pandas 等等来初始化 matplotlib 的数据,然后直接调用不同的画图的函数就可以画出我们不同的图形。

我们首先用两个 list 数组初始化了 matplotlib(plt 是我们导入模块时给 matplotlib 起的别名,因为 matplotlib 单词太长了,为了少打几个单词,我们以后都是用 plt),我们调用 plt 的 plot 函数说明我们想要使用数据画一个折线图。然后直接调用 plt 的 show 函数,就画出了我们想要的折线图。代码和效果如下图所示。

import matplotlib.pyplot as plt

plt.plot([1, 2, 3], [5, 7, 4])
plt.show()

运行结果如下图:

用其它数据类型的数据初始化 plt 的方法,大家可以自行写代码试验,为了更方便的学习 plt,我们主要讲解 plt 画图函数的使用以及画图参数的使用。

画各种经典图

我们想给我们显示的折线图来一个说明,只需要传入一个 label 参数即可,然后在绘制之前调用 plt 的 legend 函数。

import matplotlib.pyplot as plt
from pylab import mpl

mpl.rcParams['font.sans-serif'] = ['Microsoft YaHei']  # 指定默认字体:解决plot不能显示中文问题
plt.plot([-1, -2, 3], [5, -7, -4], label='测试')
plt.legend()
plt.show()

运行结果如下图:

注意,如果 label 给定的参数是中文,则需要提前指定字体, pylab 的 mpl 对象可以指定字体,首先我们要先导入 pylab 模块(from pylab import mpl)不然的话中文则不会显示。在上面代码中,我们指定字体为微软雅黑,大家也可以试着指定你系统支持的其它字体。

我们也可以通过 plt 提供的 xlabel 和 ylabel 来设置横轴和纵轴的说明,代码和效果如下图。

import matplotlib.pyplot as plt
from pylab import mpl

mpl.rcParams['font.sans-serif'] = ['Microsoft YaHei']
plt.plot([20, 40, 60], [50, 90, 150], label='房价图')
plt.xlabel('房屋面积')
plt.ylabel('房价')
plt.legend()
plt.show()

运行结果如下图:

我们也可以在一张坐标图中画多条折线,我们只需要给函数传入多组数据即可,代码和效果如下图,我们发现第二条折线的颜色会被改变,当然我们可以传入参数自己设置我们想要的颜色。另外,我们可以通过title函数可以设置整个坐标图的标题。

import matplotlib.pyplot as plt
from pylab import mpl

mpl.rcParams['font.sans-serif'] = ['Microsoft YaHei']
plt.plot([20, 40, 60], [50, 90, 150], label='房价图')
plt.plot([20, 30, 50], [30, 68, 130], label='房价优惠图')
plt.xlabel(u'房屋面积')
plt.ylabel(u'房价')
plt.title(u'两条房价图')
plt.legend()
plt.show()

运行结果如下图:

我们也可以通过 plt 的 bar 函数来画出条形图,这儿我们通过 color 参数来设置两个条形图的颜色。

import matplotlib.pyplot as plt
from pylab import mpl

mpl.rcParams['font.sans-serif'] = ['Microsoft YaHei']
plt.bar([1, 5, 3, 7], [7, 3, 12, 0], label=u"条形图1", color='r')
plt.bar([2, 6, 3, 7], [9, 6, 5, 7], label=u"条形图2", color='g')
plt.xlabel(u'x轴')
plt.ylabel(u'y轴')
plt.title(u'两个条形图')
plt.legend()
plt.show()

运行结果如下图:

我们也可以通过 plt 的 scatter 函数来画出散点图,每个散点图需要两组数组进行初始化,另外,我们可以通过 s 参数我们可以设置点的大小。

import matplotlib.pyplot as plt
from pylab import mpl

mpl.rcParams['font.sans-serif'] = ['Microsoft YaHei']
x1 = [6, 2, 3, 2, 5, 1, 7, 9]
y1 = [1, 2, 7, 6, 1, 4, 2, 5]
x2 = [1, 2, 3, 5, 7, 11, 21, 13]
y2 = [4, 5, 6, 2, 33, 2, 4, 15]
plt.scatter(x1, y1, label='散点图', color='g', s=70)  # s是点的大小
plt.scatter(x2, y2, label='散点图', color='r', s=20)  # s是点的大小
plt.xlabel('x轴')
plt.ylabel('y轴')
plt.title('两组散点图')
plt.legend()
plt.show()

运行结果如下图:

我们也可以通过 plt 的 stackplot 函数来画出堆叠图, 堆叠图可以传入 N 个数组在一个坐标系里面显示,每个数组初始化一个独立的堆叠图。

import matplotlib.pyplot as plt
from pylab import mpl

mpl.rcParams['font.sans-serif'] = ['Microsoft YaHei']
days = [1, 2, 3, 4, 5]
sleeping = [7, 8, 6, 11, 7]
eating = [2, 3, 4, 3, 2]
working = [7, 8, 7, 2, 2]
playing = [8, 5, 7, 8, 13]
colors = ['m', 'b', 'r', 'g']
plt.stackplot(days, sleeping, eating, working, playing, colors=colors)
plt.xlabel('x轴')
plt.ylabel('y轴')
plt.title('每周作息图')
plt.legend()
plt.show()

运行结果如下图:

我们也可以通过 plt 的 pie 函数来画出饼状图,饼状图里面可以传入很多参数,在下面的代码中案例中,我使用了常用的参数,大家如有另外的需求可以自行查阅。

import matplotlib.pyplot as plt
from pylab import mpl

mpl.rcParams['font.sans-serif'] = ['Microsoft YaHei']
boys = 47
girls = 23
others = 7
slices = [boys, girls, others]
labels = ['男生', '女生', '未知']
cols = ['c', 'm', 'g']
plt.pie(slices, labels=labels, colors=cols,
startangle=90,          # 饼状图旋转90度
shadow=True,            # 显示阴影
explode=(0.0, 0.1, 0),  # 离心距离
autopct='%1.2f%%')      # 百分比显示小数点位数
plt.title('我的微信好友的男女比例')
plt.legend()
plt.show()

运行结果如下图:

从文件中读取数据

如果我们的数据来源是 pandas 类型的文件或者 numpy 类型的文件,我们可以使用 pandas 提供的读文件函数或者 numpy 的读文件函数先把数据读入到内存中,然后就可以画图了。

import numpy as np
import matplotlib.pyplot as plt
from pylab import mpl

mpl.rcParams['font.sans-serif'] = ['Microsoft YaHei']
npdata = np.loadtxt('npdata.txt', dtype=int)  # 读出整型数据,默认为float
plt.plot(npdata[0], npdata[1], label='折线图')
plt.xlabel('x轴')
plt.ylabel('y轴')
plt.title('测试数据')
plt.legend()
plt.show()

如上代码案例,我们使用 numpy 的 loadtxt 函数读取文件(dtype 设置 numpy 的数据类型,否则默认为 float 类型),文件内容如下图:

然后使用 numpy 数据初始化 plt,然后使用 plot 函数画出折线图,运行结果如下图:

本节重要知识点

掌握matplotlib的初始化方法

熟练掌握常用的画图函数

熟练使用画图函数的参数来丰富图形


如果以上内容对您有帮助,请老板用微信扫一下赞赏码,赞赏后加微信号 birdpython 领取免费视频。


登录后评论