1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > matplotlib绘制3D图与等高线图

matplotlib绘制3D图与等高线图

时间:2019-07-16 21:23:25

相关推荐

matplotlib绘制3D图与等高线图

引言

在绘制折线图时,若x和y为二维数组:

x=np.array([[0,0.5,1],[0,0.5,1],[2,1,4]])y=np.array([[0,0,0],[1,1,1],[3,3,4]])plt.plot(x,y,'-rx')0 0.5 1 0 0 0 (0,0) (0.5,0) (1,0)0 0.5 1 1 1 1 (0,1) (0.5,1) (1,4)2 1 4 3 3 4 (2,3) (1,3) (4,4)xy (x,y)x,y二维数组,首先对应位置的元素组成一个坐标(x,y)然后将组成的每一列的坐标进行连接,即按照(0,0)(0,1)(2,3)连接,然后再(0.5,0)(0.5,1)(1,3)以此类推,类似一个纵向的连接,而横向之间是不连接的。

2D的结果:

那么3D在绘制的时候具体怎么绘制的?往下面看:

3.3D图与等高线图

对于3D图的绘制需要引入from mpl_toolkits.mplot3d import Axes3D

3D图和2D图的区别就是将x和y进行了meshgrid操作,并且添加了z轴的坐标。关于meshgrid的作用,具体可参见这篇博客/qq_38048756/article/details/110009968。

%matplotlib inlineimport numpy as npimport matplotlib.pyplot as pltfrom mpl_toolkits.mplot3d import Axes3Dplt.rcParams['font.sans-serif']=['SimHei']plt.rcParams['axes.unicode_minus']=Falsea=np.array([1,2,3])b=np.array([4,5])c,d=np.meshgrid(a,b) #c[[1,2,3],[1,2,3]] d[[4,4,4],[5,5,5]]e=np.array([[1,2,1],[7,8,9]])fig=plt.figure()#在画布上添加3D坐标轴ax=Axes3D(fig)#画出3d图:rstride 和 cstride 分别代表 row 和 column 的跨度,一般选择默认就行,不设置。ax.plot_surface(c,d,e,rstride=1,cstride=1,cmap='rainbow')ax.scatter(c, d,e, c = 'g', marker = '^') #将点标出来

结果:

1 2 3 4 4 4 1 2 1(1,4,1) (2,4,2) (3,4,1)1 2 3 5 5 5 7 8 9 (1,5,7) (2,5,8) (3,5,9)x y z (x,y,z)

和上面2D他绘制相比,可以看出,它既存在纵向的连接,也存在横向的连接。

等高线图:

plt.figure()plt.xlabel(r'$\theta_0$')plt.ylabel(r'$\theta_1$')theta0_val=np.linspace(-10,10,100)theta1_val=np.linspace(-1,4,100)xs,ys=np.meshgrid(theta0_val,theta1_val)#使用contour生成三维结构表面的等值线图, np.logspace(-2,3,20)代表z值10^-2到10^3的20元素的等比数列,即那些等高线CS = plt.contour(xs, ys, J_val, np.logspace(-2,3,20))#最后加入Label,inline控制是否将Label画在线里面,字体大小为10。plt.clabel(CS, inline=1, fontsize=10)# 绘制最优解plt.plot(theta[0,0], theta[1,0], 'rx', markersize=10, linewidth=2)#theta[0,0], theta[1,0]为最优解的值plt.show()

结果:

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。