写在前面:import numpy as np import matplotlib.pylab as mp 因此文章中的np就代表numpy库,mp就代表pylab绘图库 一、三维立体图像1、三维线框格式:ax.plot_wireframe(x, y, z, rstride=行距, cstrid=列距, linewidth=线宽, color=颜色) 测试代码:
import numpy as npimport matplotlib.pylab as mpfrom mpl_toolkits.mplot3d import axes3d
n = 1000# 栅格化:两组1000个-3到3的一维数组成x和y,会形成1000*1000个焦点的二维数组x, y = np.meshgrid(np.linspace(-3, 3, n), np.linspace(-3, 3, n))# uniform:均匀分布,每个随机数概率一样在0.5和1.0之内产生n个随机数y1 = (1 - x/n) * np.random.uniform(0.5, 1.0, n) # (1 - x/n)为了方便显示y2 = (1 - x/n) * np.random.uniform(0.5, 1.0, n)z = (1 - x/2 + x**5 + y**3) * np.exp(-x**2 - y**2)# 换行做运算需要用\隔开,exp是底数为x指数是-x**2 - y**2# 图像属性mp.figure('3D Wireframe')# 创建3D坐标轴ax = mp.gca(projection='3d')mp.title('3D Wireframe', fontsize=20) # 图像标题# X、Y、Z坐标轴文本ax.set_xlabel('X', fontsize=14)ax.set_ylabel('Y', fontsize=14)ax.set_zlabel('Z', fontsize=14)mp.tick_params(labelsize=10) # 刻度标签大小# 绘制三维线框图像ax.plot_wireframe(x, y, z, rstride=30, cstride=30, linewidth=0.5, color='orangered')mp.show() 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
测试效果 
2、三维曲面格式:ax.plot_surface(x, y, z, rstride=行距, cstrid=列距, cmap=颜色映射) 测试代码:
import numpy as npimport matplotlib.pylab as mpfrom mpl_toolkits.mplot3d import axes3d
n = 1000# 栅格化:两组1000个-3到3的一维数组成x和y,会形成1000*1000个焦点的二维数组x, y = np.meshgrid(np.linspace(-3, 3, n), np.linspace(-3, 3, n))# uniform:均匀分布,在0.5和1.0之内产生n个随机数y1 = (1 - x/n) * np.random.uniform(0.5, 1.0, n) # (1 - x/n)为了方便显示y2 = (1 - x/n) * np.random.uniform(0.5, 1.0, n)z = (1 - x/2 + x**5 + y**3) * np.exp(-x**2 - y**2)# 换行做运算需要用\隔开,exp是底数为x指数是-x**2 - y**2# 图像属性mp.figure('3D Surface')# 创建3D坐标轴ax = mp.gca(projection='3d')mp.title('3D Surface', fontsize=20) # 图像标题# X、Y、Z坐标轴文本ax.set_xlabel('X', fontsize=14)ax.set_ylabel('Y', fontsize=14)ax.set_zlabel('Z', fontsize=14)mp.tick_params(labelsize=10) # 刻度标签大小# 绘制三维线框图像:行距列距越小,画的图越密集ax.plot_surface(x, y, z, rstride=10, cstride=10, cmap='jet')mp.show()123456789101112131415161718192021222324252627282930313233343536123456789101112131415161718192021222324252627282930313233343536 测试效果: 
3、三维散点格式:ax.scatter(x, y, z, s=大小, c=颜色, marker=点型) 测试代码:
import numpy as npimport matplotlib.pylab as mpfrom mpl_toolkits.mplot3d import axes3d# 获得1000个使用随机作为服从正态分布的数据样本(数组)n = 1000x = np.random.normal(0, 1, n) # 一参为标准差,二参为分布平坦性(越大越分散,越小越集中),三参为点的个数y = np.random.normal(0, 1, n)z = np.random.normal(0, 1, n)d = np.sqrt(x ** 2 + y ** 2 + z ** 2) # 根号下 x平方加y平方 作为点到正态中心的距离# 绘制图像mp.figure('Scatter 3D')ax = mp.gca(projection='3d')mp.title('Scatter 3D', fontsize=20) # 图像标题ax.set_xlabel('X', fontsize=14) # X、Y刻度显示的文本ax.set_ylabel('Y', fontsize=14)ax.set_zlabel('Z', fontsize=14)mp.tick_params(labelsize=10) # 刻度标签大小ax.scatter(x, y, z, s=60, c=d, cmap='jet_r', alpha=0.5, marker='*') # marker常用D,*,s,默认圆点omp.show() 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
测试效果: 
二、极坐标系1、格式 ax = mp.gca(projection='polar’) mp.plot… mp.scatter… x、y分别对应极角、极径 2、测试代码 import numpy as npimport matplotlib.pylab as mp
t = np.linspace(0, 2 * np.pi, 1001) # 极角# 螺旋线r_spiral = 0.8 * t # 螺旋线,极径与极角是0.8倍的关系# 玫瑰线r_rose = 5 * np.sin(6 * t)# 绘制图像mp.figure('Polar', facecolor='lightgray')ax = mp.gca(projection='polar')mp.title('Polar', fontsize=20) # 图像标题# 坐标文本:极角,极径ax.set_xlabel(r'$\theta$', fontsize=14)ax.set_ylabel(r'$\rho$', fontsize=14)mp.grid(linestyle=':')# 螺旋线mp.plot(t, r_spiral, c='dodgerblue', label=r'$\rho=0.8\theta$')# 玫瑰线mp.plot(t, r_rose, c='red', label=r'$\rho=5sin(6\theta)$')mp.tick_params(labelsize=10) # 刻度标签大小mp.legend()mp.show()1234567891011121314151617181920212223242526272812345678910111213141516171819202122232425262728 3、测试效果  三、半对数坐标1、格式 mp.semilogy(…参数与mp.plot一样) mp.semilogx() 2、测试代码 import numpy as npimport matplotlib.pylab as mp
y = np.array([1, 10, 100, 1000, 100, 10, 1]) # y坐标序列# 绘制图像mp.figure('Normal & Log', facecolor='lightgray')mp.subplot(2, 1, 1) # 创建位置在2行1列的子图# 普通plotmp.title('Normal', fontsize=16) # 图像标题mp.ylabel('Y', fontsize=12)# 刻度定位:x方向ax = mp.gca()ax.xaxis.set_major_locator(mp.MultipleLocator(1) # 多点定位器主刻度)ax.xaxis.set_minor_locator(mp.MultipleLocator(0.1) # 多点定位器次刻度)# y方向ax.yaxis.set_major_locator(mp.MultipleLocator(250) # 多点定位器主刻度)ax.yaxis.set_minor_locator(mp.MultipleLocator(50) # 多点定位器次刻度)# 设置主刻度网格线mp.grid(which='major', axis='both', linewidth=0.75, linestyle='-', color='lightgray')# 设置次刻度网格线mp.grid(which='minor', axis='both', linewidth=0.25, linestyle='-', color='lightgray')mp.plot(y, 'o-', c='dodgerblue', label='plot')mp.legend()mp.subplot(2, 1, 2) # 创建位置在2行1列的子图# 对数plot坐标mp.title('Log', fontsize=16) # 图像标题mp.xlabel('X', fontsize=12)mp.ylabel('Y', fontsize=12)# 刻度定位:x方向ax = mp.gca()ax.xaxis.set_major_locator(mp.MultipleLocator(1) # 多点定位器主刻度)ax.xaxis.set_minor_locator(mp.MultipleLocator(0.1) # 多点定位器次刻度)# y方向:按照缺省来自动设置# 设置主刻度网格线mp.grid(which='major', axis='both', linewidth=0.75, linestyle='-', color='lightgray')# 设置次刻度网格线mp.grid(which='minor', axis='both', linewidth=0.25, linestyle='-', color='lightgray')mp.semilogy(y, 'o-', c='orangered', label='semilog')mp.legend()mp.tight_layout()mp.show() 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
3、测试效果 
|