matplotlib 有两种接口:一个是基于 MATLAB ,另一个是基于面向对象。基于 MATLAB 的是 pyplot 提供的,比较简单,但容易混乱;基于面向对象的方法结构清晰,是matplotlib 的精髓。
基于 MATLAB 的:自动创建和管理图和坐标系,用 pyplot 函数作图
基于面向对象的:显示创建图和坐标系,再调用对象的方法来作图
使用面向对象接口时,正确的作图流程应该是:
1.创建 Figure 实例
创建实例时,可传入的参数有:num,figsize,dpi,facecolor,linewidth,edgecolor,frameon
参数的作用:
num:图形唯一的标识符,一般用不到
figsize:画布的大小,(width,height)以元组的形式传参,默认是(6.4,4.8),单位inches(英尺)
dpi:图像分辨率
facecolor:背景色,是指画布底下图层的颜色,默认是白色
linewidth:画布边框的宽度,默认是0,表示无宽度
edgecolor:边框的颜色,使用这个参数时,需使用linewidth这个参数
frameon:默认值为Ture,表示有边框;若为False,则表示无边框
2.在 Figure 上创建 Axes
add_subplot()可传入的参数有:nrows,ncols,plot_number
nrow:表示将画布分成nrows行
ncols:表示将画布分成ncols列
nrow和ncols表示将画布分成(nrow*cols)块区域
plot_number:表示将当前对象定义到第plot_number个子区域
3.在 Axes 上添加基础类对象
基础类对象有:plot()折线图,bar()柱状图和堆积柱状图,barh()条形图和堆积条形图,stackplot()堆积面积图,hist()直方图,pie()饼图和圆环图,scatter()散点图和气泡图,boxplot()箱型图,polar()雷达图也叫极区图,errorplot()误差棒图
面向对象主要步骤:1.导入模块2.创建画布3.在画布上添加绘图区域4准备数据5..调用绘图方法绘制图表6.展示图表
注意:以下参数带有[],即[参数],表示可选,非必要
折线图
语法:
plot(*args, scalex=True, scaley=True, data=None, **kwargs)
简化后:
单线条:plot([x], y, [fmt], data=None, **kwargs)
多线条:plot([x], y, [fmt], [x2], y2, [fmt2], ..., **kwargs)
参数说明:
[x]:可选,表示x轴数据
y:必选,表示y轴数据
[fmt]:可选,是一个字符串来定义图的基本属性如:颜色(color),线型(linestyle),点型(marker)
color(颜色)
颜色单词 中文 简写
blue 蓝色 'b'
green 绿色 'g'
red 红色 'r'
cyan 蓝绿色 'c'
magenta 洋红色 'm'
yellow 黄色 'y'
black 黑色 'b'
while 白色 'w'
其实简写就是颜色单词的首字母,从传参时可以这样传color='blue',也可以color='b',还可以关键字参数color赋十六进制的字符串如 color='#900302',也可以用RGB
linestyle(线型)
简写 名字 中文
'-' solid line style 实线
'--' dashed line style 虚线
'-.' dash-dot line style 点画线
':' dotted line style 点线需要注意的是,在给marker传值时只能传简写,而不能传名字
marker(点型)
简写 名字
'.' point marker
',' pixel marker
'o' circle marker
'v' triangle_down marker
'^' triangle_up marker
'<' triangle_left marker
'>' triangle_right marker
'1' tri_down marker
'2' tri_up marker
'3' tri_left marker
'4' tri_right marker
's' square marker
'p' pentagon marker
'*' star marker
'h' hexagon1 marker
'H' hexagon2 marker
'+' plus marker
'x' x marker
'D' diamond marker
'd' thin_diamond marker
'|' vline marker
'_' hline marker
color参数,marker参数,linestyle参数可以搭配使用,使用关键字传参'[颜色][线型][点型]',也可以使用位置参数color='r,linestyle='-',marker='.'
折线图
# 1.导入模块
import matplotlib.pyplot as plt
import numpy as np
# 2.创建画布
fig = plt.figure() # figure类的对象
# 3.在画布上添加绘图区域
ax = fig.add_subplot(111)
# 准备数据
x_data = np.array([1,2,3,4,5])
y_data = np.array([6,5,5,7,4])
# 4.调用绘图方法绘制图表
ax.plot(x_data,y_data)
# 5.展示图表
plt.show()

# 通过面向对象的方式绘制图表
# 1.导入模块
import matplotlib.pyplot as plt
import numpy as np
# 2.创建画布
# Figure类的对象
fig = plt.figure(figsize=(7, 5), facecolor='#BBFFFF', linewidth=5, edgecolor='r')
# 3.在画布上添加绘图区域
ax1 = fig.add_subplot(121)
ax2 = fig.add_subplot(122)
# 准备数据
x1_data = np.array([1, 2, 3, 4, 5])
y1_data = np.array([6, 5, 5, 7, 4])
x2_data = np.array([1, 2, 3])
y2_data1 = np.array([4, 5, 6])
y2_data2 = np.array([7, 8, 9])
y2_data3 = np.array([10, 11, 12])
# 4.调用绘图方法绘制图表
ax2.plot(x2_data, y2_data1, 'r--+')
ax2.plot(x2_data, y2_data2, 'y-.o')
ax2.plot(x2_data, y2_data3, 'g-|')
ax1.plot(x1_data, y1_data, 'b:v')
# 5.展示图表
plt.show()

柱状图和堆积柱状图
语法:
bar(x, height, width=0.8, bottom=None, *, align=‘center’, data=None, **kwargs)
参数说明:
x: 表示x坐标,数据类型为int或float类型,x可以为字符串数据。
height: 表示柱状图的高度,也就是y坐标值,数据类型为int或float类型。
width: 表示柱状图的宽度,取值在0~1之间,默认为0.8。
bottom: 柱状图的起始位置,也就是y轴的起始坐标。
align: 柱状图的对齐方式,默认为’center’表示以x坐标为中心,‘edge’表示将条形的左边缘与x对齐。color: 柱状图颜色
edgecolor: 边框颜色
linewidth: 边框宽度
tick_label :下标标签堆积柱状图其实就是使用bottom参数,并传入前一组数据的height(即y轴数据)作为bottom的参数值
import matplotlib.pyplot as plt
import numpy as np
柱状图
# 创建画布
fig = plt.figure()
# 在画布上添加绘图区域
ax = fig.add_subplot(111)
# 调用绘图方法绘制图表
# 数据准备
x_data = np.arange(0,11)
y_data = np.random.random(11)
ax.bar(x_data,y_data)
# 展示图表
plt.show()

堆积柱状图
import matplotlib.pyplot as plt
import numpy as np
# 创建画布
fig = plt.figure()
# 在画布上添加绘图区域
ax = fig.add_subplot(111)
# 数据准备
x_data = np.arange(5)
y_data1 = np.array([13,14,7,8,5])
y_data2 = np.array([12,10,9,6,7])
error = [2,3.4,0.3,4,1] # 误差数据
width = 0.3
color = ['g','b']
# 调用绘图方法绘制图表
ax.bar(x_data,y_data1,width=width)
ax.bar(x_data,y_data2,width=width,bottom=y_data1)
# 展示图表
plt.show()

条形图和堆积条形图
官方语法
barh(y, width,height=0.8,left=None,align='center',*,**kwargs)
参数说明:
y:表示条形的y坐标值。
width:表示条形的宽度。
height:表示条形的高度,默认值为0.8。
left:条形左侧的×坐标值,默认值为0。
Ialign:表示条形的对齐方式,默认值为“center”,即条形与刻度线居中对齐。
tick label:表示条形对应的刻度标签。
xerr, yerr:若未设为None,则需要为条形图添加水平/垂直误差棒。
barh ()函数会返回一个BarContainer类的对象。
条形图
import matplotlib.pyplot as plt
import numpy as np
# 创建画布
fig = plt.figure()
# 在画布上添加绘图区域
ax = fig.add_subplot(111)
# 准备数据
height = 0.4
y = np.arange(5)
x1 = np.array([29,31,44,63,53])
# 调用绘图方法绘制图表
ax.barh(y,x1,height=height)
# 展示图表
plt.show()

堆积条形图
import matplotlib.pyplot as plt
import numpy as np
# 创建画布
fig = plt.figure()
# 在画布上添加绘图区域
ax = fig.add_subplot(111)
# 调用绘图方法绘制图表
# 准备数据
y = np.arange(5)
x1 = np.array([29, 31, 44, 63, 53])
x2 = np.array([28, 35, 49, 57, 58])
height = 0.3
ax.barh(y, x1, height)
ax.barh(y + height, x2, height, tick_label=['a', 'b', 'c', 'd', 'e'])
# 展示图表
plt.show()

堆积面积图
官方语法:
stackplot(x,y,labels=0,baseline='zero', data=None,*args,**kwargs)
参数说明:
x:表示x轴的数据,可以是一维数组。
y:表示y轴的数据,可以是二维数组或一维数组序列。
labels: 表示每个填充区域的标签。
baseline: 表示计算基线的方法,包括zero、sym、wiggl和weighted wiggle.
其中zero表示恒定零基线,即简单的叠加图;sym表示对称于零基线;wiggle表示最小化平方斜率之和;weighted_wiggle表示执行相同的操作,但权重用于说明每个填充区域的大小。
堆积面积图
# 创建画布
fig = plt.figure()
# 在画布上添加绘图区域
ax = fig.add_subplot(111)
# 调用绘图方法绘制图表
# 准备数据
x = np.arange(6)
y1 = np.array([1,4,3,5,6,7])
y2 = np.array([1,3,4,2,7,6])
y3 = np.array([3,4,3,6,5,5])
# 调用绘图方法绘制图表
ax.stackplot(x,y1,y2,y3)
# 展示图表
plt.show()

直方图
语法:
hist(x,bins=None, range=None, density=None,weights=None,bottom=None, **kwargs)
参数说明:
x:表示传入的数据,可以是一个数组或包含多个数组的序列。
bins: 表示矩形条的个数,默认值为10。
range: 表示数据的范围,若未设置范围,默认数据范围为(x.minO,x.max())。cumulative:表示是否计算累计频数或频率。
histtype:表示直方图的类型,支持'bar'、'barstacked'、'step'、stepfilled‘四种取值,其中'bar'为默认值,代表传统的直方图;barstacked'代表堆积直方图;'step'代表未填充的线条直方图;stepfilled'代表填充的线条直方图。
import matplotlib.pyplot as plt
import numpy as np
直方图
# 创建画布
fig = plt.figure()
# 在画布上添加绘图区域
ax = fig.add_subplot(111)
# 调用绘图方法绘制图表
# 准备数据
data = np.random.randint(0,101,50)
ax.hist(data,bins=8,histtype='stepfilled')
# 展示图表
plt.show()

饼图或圆环图
语法:
pie(x,explode=None, labels=None, autopct=None,pctdistance=0.6,startangle=None, *, data=None)
参数说明:
x:表示扇形或楔形对应的数据。
explode:表示扇形或楔形离开中心的距离。
labels:表示每个扇形或楔形对应的标签文本。
autopct:表示控制扇形或楔形的数值显示的字符串,可通过格式字符串指定小数点后的位数。
pctdistance:表示扇形或楔形对应的数值标签距离圆心的比例,默认为0.6。
shadow:表示是否显示阴影。
labeldistance:表示标签文本的绘制位置(相对于半径的比例),默认为1.1。
饼图
import matplotlib.pyplot as plt
import numpy as np
# 创建画布
fig = plt.figure()
# 在画布上添加绘图区域
ax = fig.add_subplot(111)
# 准备数据
data = np.array([20, 50, 10, 15, 30, 55])
pie_labels = np.array(['A', 'B', 'C', 'D', 'E', 'F'])
explode_position = [0.05, 0.05, 0.05, 0.05, 0.05, 0.05]
# 调用绘图方法绘制图表
ax.pie(data, explode=explode_position, radius=1, labels=pie_labels, autopct='%3.1f%%',shadow=True)
# 展示图表
plt.show()

圆环图
import matplotlib.pyplot as plt
import numpy as np
# 创建画布
fig = plt.figure()
# 在画布上添加绘图区域
ax = fig.add_subplot(111)
# 准备数据
data = np.array([20, 50, 10, 15, 30, 55])
pie_labels = np.array(['A', 'B', 'C', 'D', 'E', 'F'])
# 调用绘图方法绘制图表
ax.pie(data,labels=pie_labels,wedgeprops={'width':0.6},autopct='%3.1f%%',pctdistance=0.75)
# 展示图表
plt.show()

散点图和气泡图
官方语法:
scatter(x,y, s=None, c=None,marker-None, cmap=None,linewidths语法None,edgecolors=None,*,**kwargs)
参数说明:
x,y:表示数据点的位置。
s:表示数据点的大小。
c:表示数据点的颜色。
marker:表示数据点的样式,默认值是‘o‘,表示圆形。
alpha:表示透明度,可以取值为0~1。
linewidths:表示数据点的描边宽度,默认值是1.5。
edgecolors:表示数据点的描边颜色
散点图 import matplotlib.pyplot as plt import numpy as np # 创建画布 fig = plt.figure() # 在画布上添加绘图区域 ax = fig.add_subplot(111) # 准备数据 num = 50 x_data = np.random.rand(num) y_data = np.random.rand(num) # 调用绘图方法绘制图表 ax.scatter(x_data,y_data) # 展示图表 plt.show()

气泡图 import matplotlib.pyplot as plt import numpy as np # 创建画布 fig = plt.figure() # 在画布上添加绘图区域 ax = fig.add_subplot(111) # 准备数据 num = 50 x_data = np.random.rand(num) y_data = np.random.rand(num) area = (30*np.random.rand(num))**2 # 调用绘图方法绘制图表 ax.scatter(x_data,y_data,area) # 展示图表 plt.show()

箱型图
官方语法:
boxplot(x,notch=None, sym=None,vert=None,whis=None, position语法=None, widths=None,*, data=None)
参数说明:
x:绘制箱形图的数据。
sym:表示异常值对应的符号,默认为空心圆圈。
vert: 表示是否将箱体垂直摆放,默认值是True,表示垂直摆放。
whis: 表示箱形图上下须与上下四分位的距离,默认为1.5倍的四分位差。
positions: 表示箱体的位置。
widths: 表示箱体的宽度,默认为0.5。
patch artist:表示是否填充箱体的颜色,默认不填充。
meanline:是否用横跨箱体的线条标出平均数,默认不使用。
showcaps: 表示是否显示箱体顶部和底部的横线,默认显示。
showbox: 表示是否显示箱形图的箱体,默认显示。
showfliers: 表示是否显示异常值,默认显示。
labels: 表示箱形图的标签。
boxprops: 表示控制箱体属性的字典。
import matplotlib.pyplot as plt
import numpy as np
# 显示中文
plt.rcParams['font.family'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False
# 创建画布
fig = plt.figure()
# 在画布上添加绘图区域
ax = fig.add_subplot(111)
# 准备数据
data_2018 = np.array([5200, 5254.5, 5283.4, 5107.8, 5443.3, 5550.6,
6400.2, 6404.9, 5483.1, 5330.2, 5543, 6199.9])
data_2017 = np.array([4605.2, 4710.3, 5168.9, 4767.2, 4947, 5203, ])
# 调用绘图方法绘制图表
ax.boxplot([data_2018, data_2017], labels=['2018年', '2017年'], patch_artist=True,widths=0.3, vert=False)
# 展示图表
plt.show()

雷达图
官方语法:
polar(theta,r,**kwargs)
参数说明:
theta:表示每个数据点所在射线与极径的夹角,单位是弧度。
r:表示每个数据点到极点的距离。
# 面向对象绘制极坐标图
import matplotlib.pyplot as plt
import numpy as np
N = 20
theta = np.linspace(0, 2 * np.pi, N, endpoint=False) # 均分角度
radii = 10 * np.random.rand(N) # 随机角度
width = np.pi / 4 * np.random.rand(N) # 随机宽度
# 极坐标图绘制
ax = plt.subplot(111, projection='polar')
# 哪个角度画,长度,扇形角度,从距离圆心0的地方开始画
bars = ax.bar(theta, radii, width=width, bottom=0.0)
for r, bar in zip(radii, bars):
bar.set_facecolor(plt.cm.viridis(r / 10.0))
bar.set_alpha(0.5) # 添加颜色
plt.title('polar')
plt.show()

误差棒图
官方语法:
errorbar(x,y, yerr=None,xerr=None, fmt=",ecolor=None,*,data=N
ne,**kwargs)
参数说明:
x,y:表示数据点的位置。
xerr,yerr:表示数据的误差范围。
fmt:表示数据点的标记样式和数据点之间连接线的样式。
elinewidth:表示误差棒的线条宽度。
capsize:表示误差棒边界横杆的大小。
capthick:表示误差棒边界横杆的厚度。
import matplotlib.pyplot as plt import numpy as np # 显示中文 plt.rcParams['font.family'] = 'SimHei' plt.rcParams['axes.unicode_minus'] = False # 创建画布 fig = plt.figure() # 在画布上添加绘图区域 ax = fig.add_subplot(111) # 准备数据 # 准备 x 轴和 y 轴的数据 x = np.arange(3) y1 = np.array([2.04, 1.57, 1.63]) y2 = np.array([1.69, 1.61, 1.64]) y3 = np.array([4.65, 4.99, 4.94]) y4 = np.array([3.39, 2.33, 4.10]) # 指定测量偏差 error1 = [0.16, 0.08, 0.10] error2 = [0.27, 0.14, 0.14] error3 = [0.34, 0.32, 0.29] error4 = [0.23, 0.23, 0.39] bar_width = 0.2 # 调用绘图方法绘制图表 width = 0.2 ax.bar(x, y1,width=bar_width) ax.bar(x+width, y2,align='center',tick_label=['春季','夏季','秋季'],width=bar_width) ax.bar(x+2*width, y3,width=bar_width) ax.bar(x+3*width, y4,width=bar_width) # 添加误差棒 ax.errorbar(x,y1,yerr=error1,capsize=4,capthick=1,fmt='k,') ax.errorbar(x+width,y2,yerr=error2,capsize=4,capthick=1,fmt='k,') ax.errorbar(x+2*width,y3,yerr=error3,capsize=4,capthick=1,fmt='k,') ax.errorbar(x+3*width,y4,yerr=error4,capsize=4,capthick=1,fmt='k,') # 展示图表 plt.show()

432

被折叠的 条评论
为什么被折叠?



