**1.**contour():生成三维结构表面的等值线图(需要先用f=(x, y)生成一个三维结构)
import numpy as np
dx = dy = 0.01
x = np.arange(-2.0,2.0,dx)
y = np.arange(-2.0,2.0,dy)
X,Y = np.meshgrid(x,y) #meshgrid方法用来生成网格矩阵
def f(x,y):
return (1-y**5 + x**5)*np.exp(-x**2-y**2)
C = plt.contour(X,Y,f(X,Y),8,colors='black')
plt.contourf(X,Y,f(X,Y),8)
plt.clabel(C,inline=1, fontsize=10)
plt.show()
输出:
用contourf函数的参数cmap=还可以赋值其他颜色,例如plt.cm.hot
colorbar()函数还可以增加一个颜色图例
**2.**plot_surface():绘制曲面(3d),还可以用其他相应 的函数来打造其他的3d图形,只要将2d图形应用到Axes3d对象
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure()
ax = Axes3D(fig)
X = np.arange(-2,2,0.1)
Y = np.arange(-2,2,0.1)
X,Y = np.meshgrid(X,Y)
def f(x,y):
return (1-y**5 + x**5)*np.exp(-x**2-y**2)
ax.plot_surface(X,Y,f(X,Y),rstride=1,cstride=1,cmap=plt.cm.hot)
ax.view_init(elev=30,azim=125) #旋转曲面,修改这两个参数可以从不同视角查看曲面
plt.show() #elve(从哪个高度查看), azim(曲面旋转的角度)
多面板图形
fig = plt.figure()
ax = fig.add_axes([0.1,0.1,0.8,0.8]) #用figure()函数读取到Figure对象
#用此函数在它上面定义两个Axes对象
inner_ax = fig.add_axes([0.6,0.6,0.25,0.25])
x2 = x1 = np.arange(10)
y1 = np.array([1,2,7,1,5,2,4,2,3,1])
y2 = np.array([1,3,4,5,4,5,2,6,4,3])
ax.plot(x1,y1) #用plot()方法可以为Axes对象传入两列数据
inner_ax.plot(x2,y2)
plt.show()
gs = plt.GridSpec(3,3) #把绘图区域分成多个子区域
fig = plt.figure(figsize=(6,6))
x1 = np.array([1,3,2,5])
y1 = np.array([4,3,7,2])
x2 = np.arange(5)
y2 = np.array([3,2,4,6,4])
s1 = fig.add_subplot(gs[1,:2]) #把多个子区域分配给每一幅子图
s1.plot(x,y,'r')
s2 = fig.add_subplot(gs[0,:2])
s2.bar(x2,y2)
s3 = fig.add_subplot(gs[2,0])
s3.barh(x2,y2,color='g')
s4 = fig.add_subplot(gs[:2,2])
s4.plot(x2,y2,'k')
s5 = fig.add_subplot(gs[2,1:])
s5.plot(x1,y1,'b^',x2,y2,'yo')
plt.show()
还有一些极区图(将角度列表和半径列表传给bar),3d散点图, 3d条状图, 3d曲面图等, 只需要将2d图形应用到Axes3d对象