0% found this document useful (0 votes)
9 views21 pages

Matplotlib

Uploaded by

liujianhang130
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
9 views21 pages

Matplotlib

Uploaded by

liujianhang130
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd

图表绘制的 matplotlib 库

matplotlib 是 Python 的 2D&3D 绘图库,可以处理数学运算、绘制图表,或者在图像上


绘制点、直线和曲线。
图像的结构和构成元素
Figure figure 就是整张图像,包含了很多的 axes。(画布)
Axes axes 是一个带有坐标系的绘图区域,这个才是进行绘图的地方。(子图)
Axis axis 就是坐标轴
Artist 几乎所有的在 figure 上看到的东西都属于 artist,如图例,边框,标题
线型、线宽、颜色、坐标轴范围、坐标轴刻度等
例:

import [Link] as plt


import numpy as np
[Link](figsize=(6,4))
x=[Link](0,[Link]*4,0.01)
y=[Link](x)
[Link](x,y,"g-",linewidth=2.0) #g 为 glue 线条为绿色“-”表示线型,“linewidth”为线宽
[Link]("x") #x 轴文字 [Link](“x”,fontsize=12) 设置 x 的字体大小
[Link]("cos(x)") #y 轴文字
[Link](-1,1) #y 轴范围
[Link]("y=cos(x)") #图表标题,默认情况下不支持中文
[Link](True) #加网格
[Link]() #显示画布

在图表中显示中文
matplotlib 的默认配置文件中,使用的字体无法在图表中正确显示中文。
在.py 文件头部加上如下内容,可以让图表能正确显示中文。
[Link]['[Link]-serif']='SimHei' #设置字体为黑体
[Link]['axes.unicode_minus']=False #用来正常显示负值
中文字体说明:
“SimHei” “Kaiti” “LiSu” “YouYuan” “STsong”
黑体 楷体 隶书 幼圆 宋体

创建画布
figure()函数传递一个整数参数作为 figure 对象的序号,该序号用于标识多幅图表中的一个
图表。
(1)figure 语法说明
figure(num=None, figsize=None, dpi=None, facecolor=None, edgecolor=None, frameon=True)
num:图像编号或名称,数字为编号 ,字符串为名称
figsize:指定 figure 的宽和高,单位为英寸;
dpi 参数指定绘图对象的分辨率,即每英寸多少个像素,缺省值为 80
facecolor:背景颜色
edgecolor:边框颜色
frameon:是否显示边框

import [Link] as plt from matplotlib import pyplot as plt


fig=[Link](figsize=(4,3),facecolor='blue') fig=[Link]()
[Link]() fig.set_size_inches(5,3)
fig.set_facecolor('gray')
[Link]()

绘制多个子图
1) Subplot
语法 subplot(nrows,ncols,sharex,sharey,subplot_kw,**fig_kw)

import numpy as np from matplotlib import pyplot as plt


import [Link] as plt [Link]['[Link]-serif']='SimHei'
x = [Link](0, 100) fig=[Link]()
[Link](221) #作图 1 [Link]("subplot 方法示例")
[Link](x, x) ax1=fig.add_subplot(221)
[Link](222) #作图 2 ax1.set_title("2 行 2 列中的第 1 个子图")
[Link](x, -x) ax2=fig.add_subplot(222)
[Link](223) #作图 3 ax2.set_title("2 行 2 列中的第 2 个子图")
[Link](x, x ** 2) ax3=fig.add_subplot(223)
[Link](color='r', linestyle='--',alpha=0.3) ax3.set_title("2 行 2 列中的第 3 个子图")
[Link](224) #作图 4 ax4=fig.add_subplot(224)
[Link](x, [Link](x)) ax4.set_title("2 行 2 列中的第 4 个子图")
[Link]() [Link]()

2) Axes
Axes()函数添加子图时,需要传入一个四元组参数,用于指定子图左下角在画布上距离
左边、底边的距离分别与画布宽度和高度的比例,以及子图的宽度和高度分别占画布宽度
和高度的比例。

from matplotlib import pyplot as plt


[Link]['[Link]-serif']='SimHei'
fig=[Link]()
ax1=fig.add_axes([0.1,0.1,0.8,0.8])
ax2=fig.add_axes([0.5,0.5,0.4,0.2])
ax1.set_title("子图 1")
ax2.set_title("子图 2")
坐标轴
1)设置坐标轴范围
axes.set_xlim(left,right)和 axes.set_ylim(left,right)设置 x 轴和 y 轴的显示范围,如果 left 或
right 为 None,则表示只限制坐标轴一端的值域范围。

import [Link] as plt import [Link] as plt


import numpy as np import numpy as np
[Link](figsize=(6,4)) fig=[Link]()
x=[Link](0,[Link]*4,0.01) axes=fig.add_axes([0.1,0.1,0.8,0.8])
y=[Link](x) x=[Link](0,[Link]*4,0.01)
[Link](x,y) y=[Link](x)
[Link](0,6) [Link](x,y)
[Link](-1.5,1.5) axes.set_xlim(0,6)
[Link]() axes.set_ylim(-1.5,1.5)
[Link]()

2)设置坐标轴标签
在上面的例子中加入语句
[Link]('x') [Link]('cos(x)')

axes.set_xlabel('x') axes.set_ylabel("cos(x)")

3)设置坐标轴(移动坐标轴)
坐标轴名 left right bottom top
#获取当前坐标轴字典,{left:左轴,right:右轴,bottom:下轴,top:上轴}
ax = [Link]
#获取其中某个坐标轴
Axis = [Link][‘坐标轴名’]
#设置坐标轴的位置。该方法需要传入 2 个元素的元组作为参数
#type:<str> 移动坐标轴的参照类型 一般为‘data’(以数据的值作为移动参照值)
#val:参照值
axis.set_position((type,val))
#设置坐标轴的颜色
#color:<str> 颜色值字符串
axis.set_color(color)

import [Link] as plt


import numpy as np
[Link](figsize=(6,4))
x=[Link](-[Link]*2,[Link]*2,0.01)
y=[Link](x)
[Link](x,y)
[Link](-6,6)
[Link](-1.5,1.5)
ax = [Link]()
[Link]['top'].set_color('none')
[Link]['right'].set_color('none')
[Link]['left'].set_position(('data',0))
[Link]['bottom'].set_position(('data',0))
[Link]()
刻度
1)简单刻度设置
X 轴和 y 轴刻度设置

[Link]() [Link]() plt.tick_params()

import [Link] as plt


import numpy as np
[Link]['[Link]-serif']='SimHei' #设置字体为黑体
[Link]['axes.unicode_minus']=False #用来正常显示负值
[Link](figsize=(6,4))
x=[Link](-5,5)
y=x**2
[Link](x,y)
x_titcks=[-5,-4,-3,-2,-1,0,1,2,3,4,5]
#x_titcks=[-5,-3,-1,1,3,5] #换下刻度的密度
#x_labels=["%s 秒"%i for i in x_titcks]
[Link](x_titcks) #[Link](x_titcks,x_labels)
[Link]()

import [Link] as plt


import numpy as np
times=['2015/6/26','2015/8/1','2015/9/6','2015/10/12','2015/11/16','2015/12/26',
'2016/1/26','2015/3/26','2015/5/26','2015/7/26','2015/8/26','2015/9/26',
'2015/10/26','2015/11/26']
scales=[Link](500,2000,size=len(times))
[Link](times,scales)
#[Link](rotation=45) #设置逆时针转 45 度
#plt.tick_params(labelsize=6) #设置刻度的字号大小
#[Link](range(1,len(times),2),rotation=45,color=’r’) #减少一半的刻度
[Link]()

import [Link] as plt


import numpy as np
[Link]['[Link]-serif']='SimHei' #设置字体为黑体
[Link]['axes.unicode_minus']=False #用来正常显示负值
[Link](figsize=(6,4))
x=[Link](-5,5)
y=x**2
[Link](x,y)
vals=[-[Link]*2,-[Link],-[Link]/2,0,[Link]/2,[Link],2*[Link]]
x_titcks=['$-\pi*2$','$-\pi$','$-\pi/2$',0,'$\pi/2$','$\pi$','$\pi*2$'] #显示特殊字符
#x_titcks=[r'$-\pi*2$',r'$-\pi$',r'$-\frac{\pi}{2}$',0,r'$\frac{\pi}{2}$',r'$\pi$',r'$\pi*2$'] #显示分数形式
[Link](vals,x_titcks) #上面的写法与 LaTeX 排版公式一致,具体自己上网查看
[Link]()
2)复杂设置
设置主副刻度、设置刻度显示密度
set_major_locator 设置主刻度
set_minor_locator 设置副刻度
set_major_formatter 设置主刻度文本格式化
set_minor_formatter 设置副刻度文本格式化
① locator
ticker 模块中提供了多种 locator 类,部分列表如下
1. AutoLocator, 默认值,自动对刻度线的位置进行设置
2. MaxNLocator, 根据提供的刻度线的最大个数,自动设置
3. IndexLocator, 根据起始位置和间隔来设置刻度线
4. MultipleLocator, 根据指定的间隔来设置刻度线
5. FixedLocator, 根据提供的列表元素来设置刻度线
6. NullLocator,不显示刻度线

formatter
和 locator 类相似,formatter 也是有很多的类,部分列表如下
1. PercentFormatter,标签显示成百分比
2. StrMethodFormatter,根据字符串格式化语法进行格式化
3. FormatStrFormatter,根据字符串格式化语法进行格式化
4. MultipleLocator, 根据指定的间隔来设置刻度线
5. NullFormatter,不显示标签

import [Link] as plt


import numpy as np
import [Link] as ticker
x=[Link](0,2*[Link],50)
fig=[Link]()
ax1=fig.add_subplot(231)
[Link](x, [Link](x), label='sin')
ax1 = [Link]()
[Link].set_major_locator([Link](5))
ax2=fig.add_subplot(232)
[Link](x, [Link](x), label='sin')
[Link].set_major_locator([Link](2,0))
ax3=fig.add_subplot(233)
[Link](x, [Link](x), label='sin')
[Link].set_major_locator([Link](1.5))
ax4=fig.add_subplot(234)
[Link](x, [Link](x), label='sin')
[Link].set_major_locator([Link]([0,1, 2,3, 4,5,6]))
ax5=fig.add_subplot(235)
[Link](x, [Link](x), label='sin')
[Link].set_major_locator([Link]())
[Link]()

import [Link]
import numpy as np
from [Link] im
[Link]['[Link]-s
[Link]['[Link]
import [Link] as plt
import numpy as np
import [Link] as ticker
x=[Link](0,4*[Link],50)
fig=[Link]()
ax1=fig.add_subplot(221)
[Link](x, [Link](x), label='sin')
ax1 = [Link]()
[Link].set_major_formatter([Link]())
ax2=fig.add_subplot(222)
[Link](x, [Link](x), label='sin')
ax2 = [Link]()
[Link].set_major_formatter([Link]('{x:.2f}'))
ax3=fig.add_subplot(223)
[Link](x, [Link](x), label='sin')
ax3 = [Link]()
[Link].set_major_formatter([Link]('%.2f'))
ax4=fig.add_subplot(224)
[Link](x, [Link](x), label='sin')
ax4 = [Link]()
[Link].set_major_formatter([Link]())
[Link]()
刻度设置坐标轴日期格式

[Link]

import [Link] as plt


import numpy as np
import [Link] as mdates
x=[Link]('2019-01','2019-06',dtype='datetime64[D]')
y=[Link]([Link][0])
fig=[Link]()
ax=fig.add_axes([0.1,0.1,0.8,0.8])
[Link](x,y,c='g')
[Link].set_major_locator([Link]())
[Link].set_major_formatter([Link]('\n%Y-%m-%d'))
[Link].set_minor_locator([Link](bymonthday=(1,11,21)))
[Link].set_minor_formatter([Link]('%d'))
[Link]()

import [Link] as plt


from [Link] import MultipleLocator, ScalarFormatter
fig= [Link]()
ax1 = fig.add_subplot(221)
[Link]([0, 10, 20, 30], [0, 2, 1, 2])
[Link].set_minor_locator(MultipleLocator(1))
[Link].set_minor_formatter(ScalarFormatter())
ax1.tick_params(axis ='both', which ='major',labelsize = 16, pad = 12,colors ='r')
ax1.tick_params(axis ='both', which ='minor',labelsize = 8, colors ='b')
ax2 = fig.add_subplot(222)
[Link]([0, 10, 20, 30], [0, 2, 1, 2])
[Link].set_minor_locator(MultipleLocator(1))
[Link].set_minor_formatter(ScalarFormatter())
ax3 = fig.add_subplot(223)
[Link]([0, 10, 20, 30], [0, 2, 1, 2])
[Link](axis='both',color='r',linewidth=1.5)
ax4 = fig.add_subplot(224)
[Link]([0, 10, 20, 30], [0, 2, 1, 2])
[Link].set_minor_locator(MultipleLocator(1))
[Link].set_minor_formatter(ScalarFormatter())
ax4.tick_params(axis ='both', which ='major',labelsize = 16, pad = 12,colors ='r')
ax4.tick_params(axis ='both', which ='minor',labelsize = 8, colors ='b')
[Link](which='major',axis='both',color='r',linewidth=1.5)
[Link](which='minor',axis='x',color='b',linestyle='--',linewidth=0.5,alpha=0.5)
[Link]()
图例
import [Link] as plt
import numpy as np 0- best
[Link](figsize=(6,4)) 1- upper right
x=[Link](0,[Link]*4,0.01) 2- upper left
y=[Link](x) 3- lower lefr
z=[Link](x) 4- lower right
[Link](x,y,label="cos(x)") #红色部分被设置为图例 5- right
[Link](x,z,label="sin(x)") 6- center left
[Link]() 7- center right
#[Link](loc=8) #图例在图中的位置,值为 0-10,loc 不写则放在最佳位置 8- lower center
[Link]() 9- upper center
10- center

文本标注
[Link](x,y,string,fontsize=10,verticalalignment=”top”,horizontalalignment=”right”)
x,y 坐标位置 string 文本
Verticalalignment 垂直对齐方式 参数[“center”,”top”,”bottom”,”baseline”]
Horizontalalignment 水平对齐方式 参数[“center”,”right”,”left”]

import [Link] as plt


import numpy as np
[Link](figsize=(6,4))
x=[Link](0,[Link]*4,0.01)
y=[Link](x)
z=[Link](x)
[Link](x,y)
[Link](x,z)
[Link](5,1,"cos(x)")
[Link](6,-0.5,"sin(x)")
[Link]()

标题 title

网格 grid
grid(b, which, axis, color, linestyle, linewidth, **kwargs)
b:是否显示网格
which : 取值为'major', 'minor', 'both',指主刻度,副刻度,两者都是
axis : 取值为‘both’, ‘x’,‘y’。
import [Link] as plt
import numpy as np
[Link](figsize=(6,4))
[Link](color="r",linestyle="--")
[Link]()
显示和保存 show() 和 savefig()

文本注解工具 annotate

import numpy as np
import [Link] as plt
fig, ax = [Link]()
# 绘制一个余弦曲线
t = [Link](0.0, 5.0, 0.01)
s = [Link](2*[Link]*t)
line, = [Link](t, s, lw=2)
# 绘制一个黑色,两端缩进的箭头
[Link]('local max', xy=(2, 1), xytext=(3, 1.5),
xycoords='data',
arrowprops=dict(facecolor='black', shrink=0.05)
)
ax.set_ylim(-2, 2)
[Link]()

详细介绍见:

[Link]

[Link]

[Link] 极客教程/matplot 教程
画图命令
pyplot 模块提供了 [Link]()、[Link]()、[Link]()、[Link]()、[Link]()等 14 个用于绘
制“基础图表”的常用函数。

水平线和垂直线
[Link](vval,ymin,ymax)
[Link](xval,xmin,xmax)
plt([10,20,30,40],1,6)
plt([10,20,30,40],[1,2,3,4],[2,3,4,5])

曲线图
plot(x,y,[fmt],**kwargs)
fmt 格式字符串 用来快速设置颜色、线型等属性
具体属性 help([Link])查看
线型可以在 fmt 中设置,如"g-"中的“-”表示实线,也可以在**kwargs 中设置
如:[Link](x,y,"g",linestyle=’- -’)

import [Link] as plt


import numpy as np
[Link](figsize=(6,4))
x=[Link](0,[Link]*4,0.01)
y=[Link](x)
[Link](x,y,"g-",linewidth=2.0) #g 为 glue 线条为绿色“-”表示线型,“linewidth”为线宽
[Link]() #显示画布

**kwargs:(一部分)
alpha: 透明度 0-1,0 表示透明,1 表示不透明
label: object 字符串类型,用于设置在图例中显示的曲线名称
linestyle or ls: {'-', '--', '-.', ':', '', (offset, on-off-seq), ...} 浮点数类型 用于设置线型
linewidth or lw: float 浮点数类型 用于设置线宽
color: 用于设置线的颜色
marker: marker style string, `~.[Link]` or `~.[Link]` 用于设置点的类型
markeredgecolor or mec: color 用于设置点的边缘颜色
markeredgewidth or mew: float 用于设置点的边框粗细
markerfacecolor or mfc: color 用于设置点的颜色
markersize or ms: float 用于设置点的大小

同样的函数还有 semilogx(),semology(),loglog()等
散点图
scatter(x,y,s=None,c=None,cmap=None,alpha=None,**kwarge)
s:标量或数组,表示离散点的大小
cmap:用于指定映射调色板
alpha:[0,1]之间的浮点数,表示离散点的透明度

import numpy as np
import [Link] as plt
x = [Link](1,10)
y=x
fig = [Link]()
ax1 = fig.add_subplot(111)
ax1.set_title('Scatter Plot')
sValue = x*10
[Link](x,y,s=sValue,c='r',marker='x')
[Link]()

import [Link] as plt


import numpy as np
x=[Link](50)
y=[Link](50)
color=10*[Link](50)
area=[Link](30*[Link](50))
fig=[Link]()
ax=fig.add_axes([0.1,0.1,0.8,0.8])
[Link](x,y,c=color,s=area,cmap="hsv",marker="o",edgecolor="r",alpha=0.5)
[Link]()

关于 cmap 的参数详见:
[Link]

图层
import numpy as np
import [Link] as plt
fig=[Link]()
X = [Link](1, 100, 10, endpoint=True)
Y = [Link](60, 100, len(X))
ax1=fig.add_subplot(121)
[Link](X, Y, color ='blue', linewidth=3.5)
[Link](X, Y, 50, color ='red')
ax2=fig.add_subplot(122)
[Link](X, Y, color ='blue', linewidth=3.5, zorder=1) # 在第一层画线
[Link](X, Y, 50, color ='red', zorder=2) # 在第二层画点,数字越大,显示越靠上
[Link]()
等值线图
contour([x,y],z,[levels],**kwargs)
contourf([x,y],z,[levels],**kwargs)
Z 是二维数组,x 和 y 是与 z 形状相同的二维数组;或 x 和 y 都是一维的,且 x 的长度等于 z
的列数,y 的长度等于 z 的行数

import [Link] as plt


import numpy as np
def f(x,y):
# the height function
return (1 - x / 2 + x**5 + y**3) * [Link](-x**2 -y**2)#公式
n = 256
x = [Link](-3, 3, n)
y = [Link](-3, 3, n)
X,Y = [Link](x, y) #网格的输入值
[Link](X,Y,f(X,Y),8,alpha=0.75,cmap=[Link])
#contour 是等高线,f 是 filling 将颜色填充进去。8 是等高线的圈数,alpha 是透明度,cmap 是温度显示
C = [Link](X,Y,f(X,Y),8,color='black',linewidth=.5) #等高线的线的样式
[Link](C,inline=True,fontsize=10) #添加等高线的刻度,inline 在线里面
[Link](()) #让 x 和 y 显示出来刻度
[Link](())
[Link]()

矢量合成图
quiver(U,V,**kw)
quiver(U,V,c,**kw)
quiver(X,Y,U,V,**kw)
quiver(X,Y,U,V,c,**kw)
U、V:一维或二维数组,U 表示矢量的水平分量,V 表示矢量的垂直分量
X、Y:一维或二维数组,表示矢量箭头的位置,没有则根据 U 和 V 的维数生成一个统
一的整数网格
C:一维或二维数组,由映射调色板映射箭头颜色,不支持显示颜色

import [Link] as plt


import numpy as np
y,x=[Link][-3:3:12j,-5:5:20j]
p=[Link](x,y)
fig=[Link]()
ax=fig.add_axes([0.1,0.1,0.8,0.8])
[Link](x,y,x,y,p,cmap="hsv")
[Link]()
直方图
hist()
hist(x, bins=None, range=None, normed=False, weights=None, cumulative=False,
bottom=None, histtype=’bar’, align=’mid’, orientation=’vertical’, rwidth=None, log=False,
color=None, label=None, stacked=False, hold=None, data=None, **kwargs)
直方图是对数字数据分布的精确表示。它是对一个连续变量的概率分布的一种估计。
它是一种条形图。要构建一个直方图,请遵循以下步骤
将数值的范围 划分 出来。
将整个数值范围划分为一系列的区间。
计算每个区间内有多少数值。
分区通常被指定为一个变量的连续、不重叠的区间。

from matplotlib import pyplot as plt


import numpy as np
fig,ax = [Link](1,1)
a = [Link]([22,87,5,43,56,73,55,54,11,20,51,5,79,31,27])
[Link](a, bins = [0,25,50,75,100])
ax.set_title("histogram of result")
ax.set_xticks([0,25,50,75,100])
ax.set_xlabel('marks')
ax.set_ylabel('no. of students')
[Link]()
柱状图
bar(x,height, width,*,align=‘center’,**kwargs)
x 包含所有柱子的下标的列表
height 包含所有柱子的高度值的列表
width 每个柱子的宽度。可以指定一个固定值,那么所有的柱子都是一样的宽。或者设置一
个列表,这样可以分别对每个柱子设定不同的宽度。
align 柱子对齐方式,有两个可选值:center 和 edge。center 表示每根柱子是根据下标来对
齐, edge 则表示每根柱子全部以下标为起点,然后显示到下标的右边。如果不指定该参数 ,
默认值是 center。

import [Link] as plt


import numpy as np
# 创建一个点数为 8 x 6 的窗口, 并设置分辨率为 80 像素/每英寸
[Link](figsize=(8, 6), dpi=80)
[Link](1, 1, 1)
N = 6 # 柱子总数
values = (25, 32, 34, 20, 41, 50) # 包含每个柱子对应值的序列
index = [Link](N) # 包含每个柱子下标的序列
width = 0.35 # 柱子的宽度
# 绘制柱状图, 每根柱子的颜色为紫罗兰色
p2 = [Link](index, values, width, label="rainfall", color="#87CEFA")
[Link]('Months') # 设置横轴标签
[Link]('rainfall (mm)') # 设置纵轴标签
[Link]('Monthly average rainfall') # 添加标题
[Link](index, ('Jan', 'Fub', 'Mar', 'Apr', 'May', 'Jun')) # 添加纵横轴的刻度
[Link]([Link](0, 81, 10))
[Link](loc="upper right") # 添加图例
[Link]()

饼图
pie(x,explode=None,Labels=None,color=None,autopct=None,shadow=False,labeldistance=1.1,
Startangle=None,center=(0,0))

import [Link] as plt


import numpy as np
[Link]['[Link]-serif']='SimHei'
x=[Link]([10,10,5,70,2,10])
labels=["娱乐","育儿","饮食","房贷","交通","其他"]
explode=(0,0,0,0.1,0,0)
fig=[Link]()
ax=fig.add_axes([0.1,0.1,0.8,0.8])
[Link](x,explode=explode,labels=labels,autopct="%1.1f%%",startangle=150)
[Link]()
3D 图像绘制
Matplotlib 支持三维曲面,需要使用 axes3d 提供的 3d 坐标系。
from mpl_toolkits.maplot3d import axes3d
ax3d = [Link](projection=’3d’)
[Link](...) #绘制三维点阵
ax3d.plot_surface(....) #绘制三维曲面
ax3d.plot_wireframe(...) #绘制三维线框图

动画
在一段时间内快速连续的重新绘制图像的过程
在 Matplotlib 库中有一个子库 animation,该库下定义了多种用于绘制动态效果图的类,
例如 FuncAnimation,ArtistAnimation 等,我们这里主要介绍 FuncAnimation 的使用。该类通
过重复调用某个功能函数从而实现动态绘图效果,在功能函数中会对图进行一些修改,只
要调用时间间隔足够短,给人的感觉就是图在动态变化。创建 FuncAnimation 对象时,需要
传递的主要参数及其含义如下:
fig:用于显示动态效果的画布,即 Figure 对象;
func:函数名,重复调用的功能函数;
frames:每一帧数据,通常是可迭代对象,依次取出每一个数据传递给功能函数;
init_func:初始函数,用于执行初始化操作;
fargs:传递给功能函数的额外参数;
save_count:保存计数,默认为 100;
interval:重复调用功能函数的间隔时间,单位为毫秒,默认为 200;
repeat_delay:动画结束后,重复执行动画的间隔时间,单位为毫秒;
repeat:动画执行结束后,是否重复,默认为 True;
blit:是否更新所有点,即更新所有点还是仅更新变化的点,默认为 False;
cache_frame_data:是否缓存数据,默认为 True;
注意事项:
使 用 FuncAnimation 前 , 需 先 导 入 该 类 , 代 码 为 : from [Link] import
FuncAnimation;
创建 FuncAnimation 对象后一定要将其赋值给某个变量,否则系统会将其进行垃圾回收。

import [Link] as ma
#定义更新函数行为
def update(number):
pass
#每隔 10 毫秒执行一次 update 更新函数,作用于 [Link]()当前窗口对象
#[Link]():获取当前窗口 #update:更新函数#interval:间隔时间(单位:毫秒)
anim=[Link]([Link](),update,interval=10)
[Link]()
import numpy as np
import [Link] as plt
from [Link] import FuncAnimation

fig = [Link](figsize=(10, 5)) # 创建图


[Link]["[Link]"] = "FangSong" # 支持中文显示
[Link](-12, 12) # Y 轴取值范围
[Link]([-12 + 2 * i for i in range(13)], [-12 + 2 * i for i in range(13)]) # Y 轴刻度
[Link](0, 2 * [Link]) # X 轴取值范围
[Link]([0.5 * i for i in range(14)], [0.5 * i for i in range(14)]) # X 轴刻度
[Link]("函数 y = 10 * sin(x) 在[0,2Π]区间的曲线") # 标题
[Link]("X 轴") # X 轴标签
[Link]("Y 轴") # Y 轴标签
x, y = [], [] # 用于保存绘图数据,最开始时什么都没有,默认为空

def update(n): # 更新函数


[Link](n) # 添加 X 轴坐标
[Link](10 * [Link](n)) # 添加 Y 轴坐标
[Link](x, y, "r--") # 绘制折线图

ani = FuncAnimation(fig, update, frames=[Link](0, 2 * [Link], 0.1), interval=50, blit=False,


repeat=False) # 创建动画效果
[Link]() # 显示图片

import numpy as np
import [Link] as plt
from [Link] import FuncAnimation

fig, ax = [Link]() # 创建画布和绘图区


ax.set_axis_off() # 不显示坐标轴
x = [Link](0, 2 * [Link], 0.01) # 生成 X 轴坐标序列
line1, = [Link](x, [Link](x)) # 获取折线图对象,逗号不可少,如果没有逗号,得到的是元组
line2, = [Link](x, [Link](x)) # 获取折线图对象,逗号不可少

def update(n): # 动态更新函数


line1.set_ydata([Link](x + n / 10.0)) # 改变线条 y 的坐标值
line2.set_ydata([Link](x + n / 10.0)) # 改变线条 y 的坐标值

ani = FuncAnimation(fig, update, frames=100, interval=50, blit=False, repeat=False) # 创建动画


效果
[Link]() # 显示图
import numpy as np
import [Link] as plt
from [Link] import FuncAnimation

[Link]("Signal",facecolor='lightgray')
[Link]("Signal",fontsize=14)
[Link](0,10)
[Link](-3,3)
[Link](linestyle='--',color='lightgray',alpha=0.5)
pl = [Link]([],[],color='dodgerblue',label='Signal')[0]
pl.set_data([],[])

x=0

def update(data):
t,v = data
x,y = pl.get_data()
[Link](t)
[Link](v)
pl.set_data(x,y)
if(x[-1]>10):
[Link](x[-1]-10,x[-1])

def y_generator(): #数据通过生成器函数生成


global x
y = [Link](2*[Link]*x)*[Link]([Link](0.2*[Link]*x))
yield(x,y)
x+=0.05

ani = FuncAnimation([Link](), update,y_generator,interval=20)


plt.tight_layout()
[Link]() # 显示图
实例:随机生成各种颜色的 100 个气泡,让他们不断的增大

#-*- coding:utf-8 -*-


from __future__ import unicode_literals
import numpy as np
import [Link] as plt
import [Link] as ma
ball_type = [Link]([
('position',float,2),#位置(水平和垂直坐标)
('size',float,1), #大小
('growth',float,1), #生长速度
('color',float,4)]) #颜色(红、绿、蓝和透明)
#随机生成 100 个点对象
n = 100
balls = [Link](100,dtype=ball_type)
balls['position'] = [Link](0,1,(n,2))
balls['size'] = [Link](40,70,n)
balls['growth'] = [Link](10,20,n)
balls['color'] = [Link](0,1,(n,4))
[Link]("Animation",facecolor='lightgray')
[Link]("Animation",fontsize=14)
[Link]([])
[Link]([])
sc = [Link](
balls['position'][:,0],
balls['position'][:,1],
s=balls['size'],
color = balls['color'],alpha=0.5)
def update(number):
balls['size']+=balls['growth'] #点的大小增大
sc.set_sizes(balls['size']) #重新绘制
anim = [Link]([Link](),update,interval=30) #每隔 30 毫秒重新调用 update 函数
[Link]()
词云图
[Link]

You might also like