溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

怎么在python中繪制一個(gè)3維正態(tài)分布圖

發(fā)布時(shí)間:2021-03-25 17:01:16 來源:億速云 閱讀:326 作者:Leah 欄目:開發(fā)技術(shù)

本篇文章為大家展示了怎么在python中繪制一個(gè)3維正態(tài)分布圖,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。

使用的python工具包為:

from matplotlib import pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D

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

具體的公式為:

怎么在python中繪制一個(gè)3維正態(tài)分布圖

上面的是2維的,即只有x和y,如果是三維的話,需要一點(diǎn)變形,只需要在上面的公式基礎(chǔ)之上把exp()里面改變?yōu)椋篹xp(-((x-u)^2 + (y - u)^2)/(2q^2)), 這里的u表示平均值,q表示標(biāo)準(zhǔn)差。這樣變化之后,z = f(x, y)。這就是z值的公式了,表示的是z值隨著x和y值的變化而變化的函數(shù)。

下面貼一下代碼

這是第二張圖片的代碼。

from matplotlib import pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D

fig = 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);

# 具體函數(shù)方法可用 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 np
import matplotlib.pyplot as plt
import mpl_toolkits.mplot3d

x, 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()

上述內(nèi)容就是怎么在python中繪制一個(gè)3維正態(tài)分布圖,你們學(xué)到知識或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識儲備,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI