一、绘制固定区域的子图
matplotlib可以将整个画布规划成等分布的m*n(行 x 列)的矩阵区域,并对每个区域进行编号。
1.1、绘制单子图
使用pyplot()函数的subplot()可以在规划好的某个区域中绘制单个子图。
语法格式如下:
subplot(nrowos,ncols,index,projection,polar,sharex,sharey,label,**kwargs)
该函数的常用参数含义如下:
- nrows:表示规划区域的行数
- ncols:表示规划区域的列数
- index:表示选择区域的索引,默认从1开始编号
- projection:表示子图的投影类型,可以为None、‘aitoff’、‘hanmmer’、‘lambert’、‘mollweide’,‘prolar’、‘rectiliinear’中任取一值。
- polar:表示是否使用极坐标,默认值为False
- sharex,sharey:表示是否共享子图的x轴或y轴
subplot()函数会返回一个Axes类的子类SubplotBase对象
需要说明的是,Figure类对象可以使用add_subplot()方法绘制单子图,此方法与subplot()函数的作用是等价的
例如,将画布规划成32的矩阵区域,并在索引为6的区域中绘制子图。再将画布规划成31的矩阵区域
代码如下:
import matplotlib.pyplot as plt
ax_one=plt.subplot(326)
ax_one.plot([1,2,3,4,5])
ax_two=plt.subplot(312)
ax_two.plot([1,2,3,4,5])
plt.title("39")
plt.show()
运行结果如下:
Jupyter Notebook的绘图模式
当Jupyter Notebook工具运行程序时,默认会以静态图片的形式显示运行结果。此时的图片不支持放大或缩小等交互操作。
Jupyter Notebook支持两种绘制模式。
1、控制台绘图
2、弹出窗绘制
1.2、实例:
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']
x=[x for x in range(1,13)]
y1=[20,28,23,16,29,36,39,33,31,19,21,25]
y2=[17,22,39,26,35,23,25,27,29,38,28,20]
labels=['1月','2月','3月','4月','5月','6月','7月','8月',
'9月','10月','11月','12月']
ax1=plt.subplot(211)
ax1.plot(x,y1,'m--o',lw=2,ms=5,label='产品A')
ax1.plot(x,y2,'g--o',lw=2,ms=5,label='产品B')
ax1.set_title("产品A与产品B的销售额趋势 39",fontsize=11)
ax1.set_ylim(10,45)
ax1.set_ylabel('销售额(亿元)')
ax1.set_xlabel('月份')
for xy1 in zip(x,y1):
ax1.annotate("%s"% xy1[1],xy=xy1,xytext=(-5,5),
textcoords='offset points')
for xy2 in zip(x,y2):
ax1.annotate("%s"% xy2[1],xy=xy2,xytext=(-5,5),
textcoords='offset points')
ax1.legend()
ax2=plt.subplot(223)
ax2.pie(y1,radius=1,wedgeprops={
'width':0.5},labels=labels,
autopct='%3.lf%%',pctdistance=0.75)
ax2.set_title('产品A的销售额 39')
ax3=plt.subplot(224)
ax3.pie(y2,radius=1,wedgeprops={
'width':0.5},labels=labels,
autopct='%3.lf%%',pctdistance=0.75)
ax3.set_title('产品B的销售额 39')
plt.tight_layout()
plt.show()
运行结果:
整个窗口同时显示了3个图表
1.3、绘制多子图
使用pyplot的subplots()函数可以在规划好的所有区域中一次绘制多个子图。
语法格式如下:
subplots(nrowos=1,ncols=1,sharex=False,sharey=False,squeeze=True,subplot_kw=None,
gridspec_kw=None,**fig_kw