国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

使用python繪制3維正態分布圖的方法

2020-02-16 00:25:01
字體:
來源:轉載
供稿:網友

今天使用python畫了幾個好玩的3D展示圖,現在分享給大家。

先貼上圖片

python繪制3維正態分布圖

python繪制3維正態分布圖

python繪制3維正態分布圖

使用的python工具包為:

from matplotlib import pyplot as pltimport numpy as npfrom mpl_toolkits.mplot3d import Axes3D

在貼代碼之前,有必要從整體上了解這些圖是如何畫出來的。可以把上面每一個3D圖片理解成一個長方體。輸入數據是三維的,x軸y軸和z軸。在第三個圖片里面有x、y和z坐標的標識。在第三張圖片中,我們可以理解為,z是隨著x和y變化的函數。就像一個人在山丘地區走動一樣,其中x和y表示的是方向,z表示的這個人在上坡還是下坡。第二張圖片的中間那個,其實是一個3維的正態分布圖。

具體的公式為:

python繪制3維正態分布圖

上面的是2維的,即只有x和y,如果是三維的話,需要一點變形,只需要在上面的公式基礎之上把exp()里面改變為:exp(-((x-u)^2 + (y - u)^2)/(2q^2)), 這里的u表示平均值,q表示標準差。這樣變化之后,z = f(x, y)。這就是z值的公式了,表示的是z值隨著x和y值的變化而變化的函數。

下面貼一下代碼

這是第二張圖片的代碼。

from matplotlib import pyplot as pltimport numpy as npfrom mpl_toolkits.mplot3d import Axes3Dfig = plt.figure()ax = Axes3D(fig)len = 8;step = 0.4;def build_layer(z_value): x = np.arange(-len, len, step); y = np.arange(-len, len, step); z1 = np.full(x.size, z_value/2) z2 = np.full(x.size, z_value/2) z1, z2 = np.meshgrid(z1, z2) z = z1 + z2; x, y = np.meshgrid(x, y) return (x, y, z);def build_gaussian_layer(mean, standard_deviation): x = np.arange(-len, len, step); y = np.arange(-len, len, step); x, y = np.meshgrid(x, y); z = np.exp(-((y-mean)**2 + (x - mean)**2)/(2*(standard_deviation**2))) z = z/(np.sqrt(2*np.pi)*standard_deviation); return (x, y, z);# 具體函數方法可用 help(function) 查看,如:help(ax.plot_surface)x1, y1, z1 = build_layer(0.2);ax.plot_surface(x1, y1, z1, rstride=1, cstride=1, color='green')x5, y5, z5 = build_layer(0.15);ax.plot_surface(x5, y5, z5, rstride=1, cstride=1, color='pink')# x2, y2, z2 = build_layer(-0.26);# ax.plot_surface(x2, y2, z2, rstride=1, cstride=1, color='yellow')## x6, y6, z6 = build_layer(-0.22);# ax.plot_surface(x6, y6, z6, rstride=1, cstride=1, color='pink')# x4, y4, z4 = build_layer(0);# ax.plot_surface(x4, y4, z4, rstride=1, cstride=1, color='purple')x3, y3, z3 = build_gaussian_layer(0, 1)ax.plot_surface(x3, y3, z3, rstride=1, cstride=1, cmap='rainbow')plt.show()這是第三張圖片的代碼import numpy as npimport matplotlib.pyplot as pltimport mpl_toolkits.mplot3dx, y = np.mgrid[-1:1:20j, -1:1:20j]z = x * np.exp(-x ** 2 - y ** 2)ax = plt.subplot(111, projection='3d')ax.plot_surface(x, y, z, rstride=2, cstride=1, cmap=plt.cm.coolwarm, alpha=0.8)ax.set_xlabel('x')ax.set_ylabel('y')ax.set_zlabel('z')plt.show()            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 黎平县| 城市| 新晃| 阿拉尔市| 绥化市| 永州市| 鄢陵县| 循化| 神农架林区| 德钦县| 通渭县| 岐山县| 安徽省| 菏泽市| 洛扎县| 遂平县| 济源市| 江川县| 柳林县| 沙坪坝区| 蒙阴县| 盐源县| 萨迦县| 中西区| 上饶市| 朝阳区| 安龙县| 安岳县| 兰州市| 永福县| 柏乡县| 依安县| 新源县| 门源| 东明县| 仪陇县| 莱西市| 中江县| 池州市| 屯门区| 吉木乃县|