目录
一、绘图基本流程
二、创建画布
三、绘制图像
1.matplotlib.pyplot.plot
2.matplotlib.pyplot.scatter
3.matplotlib.pyplot.hist
4.matplotlib.pyplot.pie
四、图像展示
1.matplotlib.pyplot.legend
2.matplotlib.pyplot.subplots
3. matplotlib.pyplot.grid
4.matplotlib.pyplot.show
五、保存图像
matplotlib.pyplot.savefig
绘图基本流程是先创建画布,再绘制图像,如果需要则保存图片(必须在显示图片的前面保存),再显示图片
matplotlib.pyplot.figure(num=None, figsize=None, dpi=None, *, facecolor=None,
edgecolor=None,frameon=True, FigureClass=, clear=False, **kwargs)
figure 函数可以创建多个画布,但是每次只有一个画布被激活,这个被激活的画布才可以被设置属性和展示,返回一个 figure 对象。
参数分析:
num :int 或 string 或 Figure 或 SubFigure,可选参数,是 figure( ) 返回对象的唯一标识。每次调用 pyplot.figure( ) 都会创建或激活一个新的画布,而 num 则相当于给每一个画布一个名字。如果不加 num 参数直接调用 figure( ) 会创建或激活一个 num 为默认值的画布,如果带上 num 参数会创建或激活一个有标识符的的画布。num 参数使得一个程序可以创建多个图像,如果要使用标识符为 id 的图窗只需在 plot 之前调用 figure( num = id ) 即可激活该画布。
<示例>
# 创建一个标识符为1的画布
fig1 = matplotlib.pyplot.figure(num=1)
# 创建一个默认画布
fig2 = matplotlib.pyplot.figure()
# 激活num=1的画布(方法一)
matplotlib.pyplot.figure(num=1)
# 激活num=1的画布(方法二)
matplotlib.pyplot.figure(num=fig1)
# 激活默认画布
matplotlib.pyplot.figure()
figsize :元组(float, float),画布大小参数,默认值为(6.4,4.8),可以自行调整大小
<示例>
# 设置figsize为(20,8)
matplotlib.pyplot.figure(figsize=(20,8))
dpi:float, 像素,默认值为100,和figure一起决定图像的大小
<示例>
# 设置figsize为(20,8),像素为50
matplotlib.pyplot.figure(figsize=(20,8),dpi=50)
facecolor:color, 背景颜色,默认为白色
<示例>
# 设置背景颜色为gray
matplotlib.pyplot.figure(facecolor='gray')
edgecolor: color,边界颜色,默认为白色
<示例>
# 设置边界颜色为red
matplotlib.pyplot.figure(edgecolor='red')
frameon: bool,绘制图形框架开关,默认为True, 绘制图形框架,区别在于是否看地到背景颜色
<示例>
frameon = True 的情况:
frameon = False 的情况:
FigureClass:subclass of Figure, 如果设置将创建该子类的一个实例,而不是一个普通Figure。
clear:bool, 清除开关,默认为False, 如果 True 并且图形已存在,则将其清除。
layout: 布局方式,可选{'constrained', 'compressed', 'tight', 'none', LayoutEngine, None}, 默认为none, 用于调整复杂的图像,防止元素重叠。
注:使用布局会减慢图像绘制
plot 可以在图窗上画出点,再把点连接形成图像
调用模板:
plot([x], y, [fmt], *, data=None, **kwargs)
plot([x], y, [fmt], [x2], y2, [fmt2], ..., **kwargs)
[x],[fmt] 等带有方括号的参数为可选参数
常用参数:
[x]: 列表,表示横坐标,如果 x 参数不填,y 坐标依次和 0 , 1 , 2 , 3 ... 对应
y: 列表,表示纵坐标,依次和 x 下标为 0 , 1 , 2 , 3 ... 的数对应
[fmt]: 字符串,表示图例,格式为 ' [color][marker][line] ' ,color 代表图例的颜色,maker 代表对应点的样式,line 代表点与点之间连线的样式,具体参数参考下表,如果不设置[fmt]参数则图例为实线
[label]: 字符串,给所作的图线添加标签,如果在一张图中绘制多条图线,调用 legend() 显示图例时将会显示该标签,如果不设置label参数则不会显示该图线的图例
[linewidth]: int ,决定画线的粗细,默认为2
<示例>
import matplotlib.pyplot as plt
# 创建画布
fig = plt.figure(num=1)
# 绘制图像
plt.plot( [1,2,3,4,5,6,7],[1,2,1.4,3.7,5,2.6,9],'ro-',label='line 1', linewidth=2)
plt.plot( [1,2,3,4,5,6,7],[2,4,2,5,6,7,13],'k.-',label='line 2', linewidth=2)
# 显示图像
plt.legend(title="Example")
plt.show()
character |
color |
---|---|
|
蓝色 |
|
绿色 |
|
红色 |
|
绿蓝色 |
|
品红色 |
|
黄色 |
|
黑色 |
|
白色 |
character |
description |
---|---|
|
点 |
|
逗号 |
|
实心圆点 |
|
倒三角 |
|
正三角 |
|
左三角 |
|
右三角 |
|
向下无边三角 |
|
向上无边三角 |
|
向左无边三角 |
|
向右无边三角 |
|
八边形 |
|
正方形 |
|
五边形 |
|
加粗加号 |
|
星 |
|
实心六边形 |
|
实心六边形 |
|
加号 |
|
x |
|
加粗x |
|
填充菱形 |
|
窄菱形 |
|
竖线 |
|
横线 |
character |
description |
---|---|
|
实线 |
|
虚线 |
|
点划线 |
|
点线 |
scatter 可以在图中画出散点,但是不会连接
matplotlib.pyplot.scatter(x, y, s=None, c=None, marker=None, cmap=None, norm=None,vmin=None, vmax=None, alpha=None,
linewidths=None, *, edgecolors=None,plotnonfinite=False, data=None, **kwargs)
常用参数:
x: 列表,表示横坐标
y: 列表,表示纵坐标
[s]: float 或 列表,可以调整每个散点的大小
[c]: 列表,调整每一个点的颜色
[maker]: 点的样式,参考 plot 的 makker 参数,默认为 'o',画圆点图
[alpha]: 透明度,默认为1不透明,范围在 0~1,值越小越透明
<示例>
import matplotlib.pyplot as plt
# 创建画布
fig = plt.figure(num=1)
# 绘制图像
plt.scatter( [1,2,3,4,5,6,7],[1,2,1.4,3.7,5,2.6,7],s=[36,54,36,72,36,90,60],
c=['r','g','b','c','y','k','m'],marker='^',alpha=0.5)
# 显示图像
plt.show()
hist 可以在图中画出直方图,统计出每个区间的数据个数并将该个数作为每个直方的高度
matplotlib.pyplot.hist(x, bins=None, range=None, density=False, weights=None, cumulative=False,
bottom=None, histtype='bar', align='mid', orientation='vertical', rwidth=None,
log=False, color=None, label=None, stacked=False, *, data=None, **kwargs)
参数分析:
x: 列表(可为二维数组),要统计的数据
bins: int 或 列表,默认为10,如果为 int ,表示在 (x.min( ), x.max( )) 中分为 bins 个直方,如果为列表,例如 [ 0 ,1 , 3, 6, 7] 则表示统计 0~1,1~3,3~6,6~7 上的数据个数并显示。
range: 元组,用于限制统计范围,当且仅当 bins 为列表时起作用,例如 range = (0.1,0.6) ,此时将统计 0.1~0.6 范围的数据
density:bool,默认为False, 控制 y 轴是数量还是频率,density = True 时显示频率并且返回频率列表,density = False 时显示数量
weights: 列表,权重数组,要求和 x 数组大小一致,与 x 的数据相对应,weights[i] 决定 x[i] 的权重
cumulative:bool,默认为 False ,决定是否从左往右依次累加 y 值
histtype:{'bar', 'barstacked', 'step', 'stepfilled'},默认为 'bar',决定直方图的样式
align:{'left', 'mid', 'right'}, 默认为: 'mid',决定 bar 的对其方式
orientation:{'vertical', 'horizontal'},默认为 'vertical' ,决定图是水平还是垂直
rwidth: float ,决定 bar 的宽度,如果 histtype 为 'step' 和 'stepfilled',不起作用
log: bool ,决定 y 轴是否取对数,用于处理 y 轴数据比较大的情况
color: 决定 bar 的颜色,参数参考 plot 的 color 参数
label: string ,给图例设置标签,如果 x 为二维数组,label 只会显示 x 的第一行数据的图例
stacked: bool,默认为 False,决定是否显示分层直方,只有当 x 为二维数组才可看到效果。当 x 为二维数组时,将 stacked 设为 True 可显示分层直方图。
<示例>
import matplotlib.pyplot as plt
# 创建画布
fig = plt.figure()
# 绘制图像
plt.hist([[1,1,1,1,1,1,2,2,3,3,4,4,5,5,5,6],[1,1,1,1,1,1,2,4,2,3,3,3,5,5,5,6]],
bins=10,weights=[[0.2,0.3,0.5,1.3,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.1,3],
[1.2,0.7,0.9,1.6,1.5,0.8,0.9,01.1,0.4,0.6,0.7,0.2,2.1,0.5,0.1,3]],rwidth=0.9,stacked=True,label='hist')
plt.legend()
# 显示图像
plt.show()
绘制饼图
matplotlib.pyplot.pie(x, explode=None, labels=None, colors=None, autopct=None, pctdistance=0.6, shadow=False,
labeldistance=1.1, startangle=0, radius=1, counterclock=True, wedgeprops=None, textprops=None, center=(0, 0),
frame=False, rotatelabels=False, *, normalize=True, hatch=None, data=None)
常用参数:
x:一维数组,表示饼图中各个数据的大小
explode:一维数组,和 x 相对应,决定各个楔块的顶点与圆点的偏移量
labels:列表,与 x 的数对应,给每个楔块添加标签
colors:一维数组,与 x 对应,决定每个楔块的颜色
hatch:一维数组,与 x 对应,决定每个锲块的填充样式,如,'**o' , 'oO', 'o.o', '.||.'
autopct: string 类型,设置每个锲块的百分数类型,例如 '%.2f%%'
shadow:bool,默认为 False,决定饼图是否有阴影
radius:float, 默认为 1,决定饼图的半径
<示例>
import matplotlib.pyplot as plt
# 创建画布
fig = plt.figure()
# 绘制图像
plt.pie([1,3,5,8,9],[0.15,0.05,0.05,0.05,0.05],labels=['dogs','cats','pigs','ducks','tigers'],
autopct="%.2f%%",shadow=True,radius=1.3,hatch=['o.o','.||.','o','oO','*'])
# 显示图像
plt.show()
在轴上放置一个图例
matplotlib.pyplot.legend(*args, **kwargs)
常用参数:
title:string ,默认为None,图例的标题
fontsize:int 或 {'xx-small', 'x-small', 'small', 'medium', 'large', 'x-large', 'xx-large'},图例的字体大小
title_fontsize:int 或 {'xx-small', 'x-small', 'small', 'medium', 'large', 'x-large', 'xx-large'},默认为 None,图例标题的字体大小
labelcolor:string 或 list,默认为 None,图例文本的颜色
alignment:{'center', 'left', 'right'},默认为 'center ',图例标题和条目框的对齐方式。这些条目作为一个块对齐,以便标记始终对齐。
loc:string 或 一对浮点数,默认为 best,图例的显示位置
Location String |
Location Code |
---|---|
'best' (Axes only) |
0 |
'upper right' |
1 |
'upper left' |
2 |
'lower left' |
3 |
'lower right' |
4 |
'right' |
5 |
'center left' |
6 |
'center right' |
7 |
'lower center' |
8 |
'upper center' |
9 |
'center' |
10 |
<示例>
import matplotlib.pyplot as plt
# 创建画布
fig = plt.figure(num=1)
# 绘制图像
plt.plot( [1,2,3,4,5,6,7],[3,4,6.4,7,5,9.4,9],'ro-',label='line 1', linewidth=2)
plt.plot( [1,2,3,4,5,6,7],[8,7,9,8,10,11,13],'k.-',label='line 2', linewidth=2)
# 显示图像
plt.legend(title="Example",loc='lower right',alignment='left',labelcolor='green',fontsize='large',title_fontsize='large')
plt.show()
画多张图
matplotlib.pyplot.subplots(nrows=1, ncols=1, *, sharex=False, sharey=False, squeeze=True, width_ratios=None, height_ratios=None, subplot_kw=None, gridspec_kw=None, **fig_kw)
常用参数:
nrows, ncols:int,默认为 1,表示子窗口的行数和列数
返回值:
figure 对象和 axs 数组,axs 相当于 figure对象,和之前的绘图方式一样
<例如>
import matplotlib.pyplot as plt
# 创建画布
fig ,axs= plt.subplots(1,2)
# 绘制图像
axs[0].plot( [1,2,3,4,5,6,7],[3,4,6.4,7,5,9.4,9],'ro-',label='line 1', linewidth=2)
axs[1].plot( [1,2,3,4,5,6,7],[8,7,9,8,10,11,13],'k.-',label='line 2', linewidth=2)
# 显示图像
plt.show()
在图中显示网格
matplotlib.pyplot.grid(visible=None, which='major', axis='both', **kwargs)
参数解析:
visible: bool ,决定是否显示网格,如果 visible = False 默认显示网格
which: {'major', 'minor', 'both'},决定显示网格线的类型
axis: {'both', 'x', 'y'}, 决定显示哪条轴的线
linestyle: {'-', '--', '-.', ':', '', (offset, on-off-seq), ...},网格线样式
color: string ,网格线颜色
alpha: int ,网格线透明度
<示例>
import matplotlib.pyplot as plt
# 创建画布
fig = plt.figure()
# 绘制图像
plt.plot([3,5,6,4,2,7,5,8])
# 显示图像
plt.grid(True,axis='x',linestyle='--',alpha=0.5)
plt.show()
显示图像
matplotlib.pyplot.show(*, block=None)
注意:保存图片要在 show 前保存
savefig(fname, *, dpi='figure', format=None, metadata=None,
bbox_inches=None, pad_inches=0.1,
facecolor='auto', edgecolor='auto',
backend=None, **kwargs
)
参数解析:
fname:string,文件名或文件全路径
dpi:float or 'figure',默认为 figure,决定图片的像素
format:文件保存格式,可为 'jpg' ,'png' 等等
<示例>
import matplotlib.pyplot as plt
# 创建画布
plt.figure()
# 绘制图像
plt.plot( [1,2,3,4,5,6,7],[3,4,6.4,7,5,9.4,9],'ro-',label='line 1', linewidth=2)
plt.plot( [1,2,3,4,5,6,7],[8,7,9,8,10,11,13],'k.-',label='line 2', linewidth=2)
# 显示图像
plt.legend()
plt.grid(axis='x',which="major")
plt.savefig("test.png",dpi=100)
plt.show()