Matplotlib.pyplot是一些命令行风格函数的集合,使matplolib以类似matlab的方式工作。每个pylot函数对一幅图片(figure)做一些改动,如:创建新图片,在图片创建一个新的作图区域,在一个作图区域内画直线,给图添加标签(label)等。Matplotlib.pyplot是有状态的,亦即它会保存当前图片和作图区域的状态,新的作图函数会作用在当前图片的状态基础之上。接下来我们来看看如何使用。
(1)绘制简单图形
方法一:先生成一个画布,然后在这个画布上隐式的生成一个画图区域来进行画图
import matplotlib.pyplot as plt
input_value = ['little Prince', 'snow White', 'Cinderella', 'Thumbelina'] # 图形输入值
squares = [1, 4, 9, 16] # 图形输出值
# plot根据列表绘制出有意义的图形,linewidth是图形线宽,可省略不写
plt.plot(input_value, squares, linewidth=5)
plt.title("Borrowing records", fontsize=24) # 设置图标标题
plt.xlabel("bookName", fontsize=5) # 设置x轴标签
plt.xticks(rotation=15, fontsize=5) # 把x轴的字体旋转15度
plt.ylabel("number", fontsize=14) # 设置y轴标签
plt.tick_params(axis='both', labelsize=14) # 设置刻度标记的大小
plt.show() # 打开matplotlib查看器,并显示绘制图形
运行结果:
方法二:先生成一个画布,然后在画布上,选定一个子区域画一个子图
import matplotlib.pyplot as plt
fig = plt.figure(num=1, figsize=(4, 4)) # 生成一个画布
ax = fig.add_subplot(111) # 将画布分成1*1的子画布,并选中第一个子图进行操作
ax.plot([1, 2, 3, 4], [1, 2, 3, 4])
plt.show()
结果:
画单个图的时候,ax.的效果看起来和plt.的效果差不多,但是后面修饰图片的时候,第二种方法比较方便。
(2)创建子图
把一个画布分成几个区域来绘制几幅不同的图
import matplotlib.pyplot as plt
fig = plt.figure(num=1, figsize=(4, 4)) # 将画布分为2x2的分布
ax1 = fig.add_subplot(221) # 选择2x2中第一个子画布进行操作
ax1.plot([1, 2, 3, 4], [1, 2, 3, 4])
ax2 = fig.add_subplot(222) # 选择2x2中第二个子画布进行操作
ax2.plot([1, 2, 3, 4], [2, 2, 3, 4])
ax3 = fig.add_subplot(223) # 选择2x2中第三个子画布进行操作
ax3.plot([1, 2, 3, 4], [1, 2, 2, 4])
ax4 = fig.add_subplot(224)
ax4.plot([1, 2, 3, 4], [1, 2, 3, 3])
plt.show()
运行结果:
(2)散点图
使用scatter()方法绘制散点图,传一个x和y的坐标,在该位置上绘制一个点
scatter()方法的参数可以选择颜色、设置标记央视以及透明度等,这里不展开描述,只是给大家展示基本使用操作,感兴趣的读者可以去查一下
import matplotlib.pyplot as plt
# 散点图
# 画一个点
plt.scatter(4, 24) # 在坐标(2,4)上画一个点,图中蓝色的点
plt.scatter(1.5, 3, s=100) # 在坐标(1.5,3)上描绘一个点,且笔画大小为100,图中黄色的点
# 画一系列的点
x_value = [1, 2, 3, 4, 5]
y_value = [1, 4, 9, 16, 25]
plt.scatter(x_value, y_value) # 图中绿色的点
plt.show()
运行结果:
(3)绘制曲线
通过(2)中我们了解到了使用scatter()来绘制点的使用方法,我们在学习数学的时候,一条平滑的曲线就是由无数个点构成的,因此可以使用scatter()这个方法来绘制曲线
matplotlib中可以给散点图中的各个点指定颜色。默认为蓝色点和黑色轮廓,在散点图包含的数据点不多时效果很好。但绘制很多点时,黑色轮廓可能会粘在一起,所以需要在scatter()中将其轮廓设置为none
import matplotlib.pyplot as plt
x_value = list(range(1, 1001)) # 整数列表,从1到1001的整数,但不包括1001
y_value = [x**2 for x in x_value] # x的值平方后作为y坐标的值
# edgecoloe='none' 删除数据点的轮廓
plt.scatter(x_value, y_value, edgecolor='none', s=30)
# 设置坐标轴的取值范围,x轴的取值范围[0,1100],y轴的取值范围[0,110000]
plt.axis([0, 1100, 0, 110000])
plt.show()
运行结果:
(4) 颜色映射
将(3)中的第四行的代码,添加参数:c=y_value,cmap=plt.cm.Blues
将c设置成一个y值列表,并使用参数cmap告诉pyplot使用那个颜色映射,这些代码将y值较小的点显示为蓝色,将y值较大的点显示为深蓝色
plt.scatter(x_value, y_value, c=y_value, cmap=plt.cm.Blues, edgecolor='none', s=30)
运行结果:
(5)保存图表
在show()后面添加下面代码:
plt.savefig('squares_plot.png',bbox_inches='tight')
第一个参数:给保存的图表文件命名,保存在和代码的同目录下
第二个参数:将多余的空白区域裁剪掉,要保留空白区域则不用写这个参数