Numpy(七)Matplotlib

      matplotlib.pyplot包中包含了简单绘图功能。调用的函数都会改变当前的绘图。将绘图存入文件或使用show函数显示出来。

1、绘制多项式函数

多项式函数是变量的整数次冥与系数的乘积之和,可以用下面的公式表示:


由于多项式函数只包含加法和乘法运算,因此计算容易,并且可以用于计算其他数学函数的近似值。在Numpy中,多项式函数的系数可以用一维数组表示,如f(x) =x^3-2x+1,则可以表示为数组:

[python]  view plain  copy
  1. a = np.array([1.0,0,-2,1])  
其中a[0]是最高次项,a[-1]是常数项。

      系数可以通过poly1d( )函数转换为多项式对象,此对象可以像函数一样调用,它返回多项式函数的值。

     

[python]  view plain  copy
  1. >>> a = np.array([1.0,0,-2,1])  
  2. >>> p = np.poly1d(a)  
  3. >>> type(p)  
  4. <class 'numpy.lib.polynomial.poly1d'>  
  5. >>> p(np.linspace(0,1,5))  
  6. array([ 1.      ,  0.515625,  0.125   , -0.078125,  0.      ])  
  7. >>>   
      对 poly1d( )对象进行加减乘除运算 ,相当于对应多项式函数进行计算,如:

[python]  view plain  copy
  1. >>> p+[-2,1#和p+np.poly1d([-2,1])相同,-2x+1  
  2. poly1d([ 1.,  0., -4.,  2.])  
  3. >>> p*p #两个3次多项式相乘,得到一个6次多项式  
  4. poly1d([ 1.,  0., -4.,  2.,  4., -4.,  1.])  
  5. >>> p/[1,1#返回2个多项式除法的结果,分别为商式和余式  
  6. (poly1d([ 1., -1., -1.]), poly1d([ 2.]))  
  7. >>>   
 上面的商式为:x^2-x-1,余式为2。
           多项式对象的deriv( )和integ( )方法分别用于计算多项式函数的微分和积分 ,如:

[python]  view plain  copy
  1. >>> p.deriv()  
  2. poly1d([ 3.,  0., -2.])  
  3. >>> p.integ()  
  4. poly1d([ 0.25,  0.  , -1.  ,  1.  ,  0.  ])  
        多项式函数的根可以用roots( )计算

[python]  view plain  copy
  1. >>> r = np.roots(p)  
  2. >>> r  
  3. array([-1.61803399,  1.        ,  0.61803399])  
  4. >>>   
        而 poly()函数可以将根转换为多项式的系数 ,如:

[python]  view plain  copy
  1. >>> np.poly(r)  
  2. array([  1.00000000e+00,  -1.22124533e-15,  -2.00000000e+00,  
  3.          1.00000000e+00])  
  4. >>>   
参考:http://blog.csdn.net/kezunhai/article/details/46271165

import numpy as np
import matplotlib.pyplot as plt
# (1) 以自然数序列作为多项式的系数,使用poly1d函数创建多项式。
func = np.poly1d(np.array([1, 2, 3, 4]).astype(float))
# (2) 使用NumPy的linspace函数创建x轴的数值,在-10和10之间产生30个均匀分布的值。
x = np.linspace(-10, 10, 30)
# (3) 计算我们在第一步中创建的多项式的值。
y = func(x)
# (4) 调用plot函数,这并不会立刻显示函数图像。
plt.plot(x, y)
# (5) 使用xlabel函数添加x轴标签。
plt.xlabel('x')
# (6) 使用ylabel函数添加y轴标签。
plt.ylabel('y(x)')
# (7) 调用show函数显示函数图像。
plt.show()

2、绘制多项式函数及其导函数

import numpy as np
import matplotlib.pyplot as plt
# (1) 创建多项式函数及其导函数。
func = np.poly1d(np.array([1, 2, 3, 4]).astype(float))
func1 = func.deriv(m=1)
x = np.linspace(-10, 10, 30)
y = func(x)
y1 = func1(x)
# (2)以两种不同风格绘制多项式函数及其导函数:红色圆形和绿色虚线。你可能无法在本书的印刷版中看到彩色图像,因此只能自行尝试绘制图像。
plt.plot(x, y, 'ro', x, y1, 'g--')
plt.xlabel('x')
plt.ylabel('y')
plt.show()

3、绘制多项式函数及其导函数

subplot函数创建第一个子图。该函数的第一个参数是子图的行数,第二个参数是子图的列数,第三个参数是一个从1开始的序号。另一种方式是将这3个参数结合成一个数字,如311。

import numpy as np
import matplotlib.pyplot as plt
# (1) 创建多项式函数及其导函数。
func = np.poly1d(np.array([1, 2, 3, 4]).astype(float))
x = np.linspace(-10, 10, 30)
y = func(x)
func1 = func.deriv(m=1)
y1 = func1(x)
func2 = func.deriv(m=2)
y2 = func2(x)
# (2) 使用subplot函数创建第一个子图。该函数的第一个参数是子图的行数,第二个参数是子图的列数,第三个参数是一个从1开始的序号。另一种方式是将这3个参数结合成一个数
# 字,如311。这样,子图将被组织成3行1列。设置子图的标题为Polynomial,使用红色实线绘制。
plt.subplot(311)
plt.plot(x, y, 'r-')
plt.title("Polynomial")
# (3) 使用subplot函数创建第二个子图。设置子图的标题为First Derivative,使用蓝色三角形绘制。
plt.subplot(312)
plt.plot(x, y1, 'b^')
plt.title("First Derivative")
# (4) 使用subplot函数创建第三个子图。设置子图的标题为Second Derivative,使用绿色圆形绘制。
plt.subplot(313)
plt.plot(x, y2, 'go')
plt.title("Second Derivative")
plt.xlabel('x')
plt.ylabel('y')
plt.show()

4、三维空间中绘图

我们将在三维空间中绘制一个简单的三维函数。
z = x2 =y2

from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np
from matplotlib import cm
fig = plt.figure()
# (1) 我们需要使用3d关键字来指定图像的三维投影。
ax = fig.add_subplot(111, projection='3d')
# (2) 我们将使用meshgrid函数创建一个二维的坐标网格。这将用于变量x和y的赋值。
u = np.linspace(-1, 1, 100)
x, y = np.meshgrid(u, u)
z = x ** 2 + y ** 2
# (3) 我们将指定行和列的步幅,以及绘制曲面所用的色彩表(color map)。步幅决定曲面上“瓦片”的大小,而色彩表的选择取决于个人喜好。
ax.plot_surface(x, y, z, rstride=4, cstride=4, cmap=cm.YlGnBu_r)
plt.show()


5、绘制色彩填充的等高线图

        使用contour函数创建一般的等高线图。对于色彩填充的等高线图,可以使用contourf绘制。

import matplotlib.pyplot as plt
import numpy as np
from matplotlib import cm
fig = plt.figure()
ax = fig.add_subplot(111)
u = np.linspace(-1, 1, 100)
x, y = np.meshgrid(u, u)
z = x ** 2 + y ** 2
ax.contourf(x, y, z)
plt.show()

6、制作动画

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
fig = plt.figure()
ax = fig.add_subplot(111)
N = 10
x = np.random.rand(N)
y = np.random.rand(N)
z = np.random.rand(N)
# (1) 我们将用不同颜色的圆形、小圆点和三角形来绘制三个数据集中的数据点。
circles, triangles, dots = ax.plot(x, 'ro', y, 'g^', z, 'b.')
ax.set_ylim(0, 1)
plt.axis('off')
# (2) 下面的函数将被定期调用以更新屏幕上的内容。我们将随机更新两个数据集中的y坐标值。
def update(data):
    circles.set_ydata(data[0])
    triangles.set_ydata(data[1])
    return circles, triangles
# (3) 使用NumPy生成随机数。
def generated():
    while True: yield np.random.rand(2, N)
anim = animation.FuncAnimation(fig, update, generated(), interval=150)
plt.show()

待续!













评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HySmiley

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值