Python中的3D繪圖命令
很多情況下,為了能夠觀察到數(shù)據(jù)之間的內(nèi)部的關(guān)系,可以使用繪圖來更好的顯示規(guī)律。
比如在下面的幾張動(dòng)圖中,使用matplotlib中的三維顯示命令,使得我們可以對(duì)于logistic回歸網(wǎng)絡(luò)的性能與相關(guān)參數(shù)有了更好的理解。
下面的動(dòng)圖顯示了在訓(xùn)練網(wǎng)絡(luò)時(shí),不同的學(xué)習(xí)速率對(duì)于算法收斂之間的影響。
下面給出了繪制這些動(dòng)態(tài)曲線的相關(guān)的python指令:
01 3D plot
1.基本語法
在安裝matplotlib之后,自動(dòng)安裝有 mpl_toolkits.mplot3d。
#Importing?Libraries
import?matplotlib.pyplot?as?plt
from?mpl_toolkits.mplot3d?import?axes3d
#3D?Plotting
fig?=?plt.figure()
ax?=?plt.axes(projection="3d")
#Labeling
ax.set_xlabel('X?Axes')
ax.set_ylabel('Y?Axes')
ax.set_zlabel('Z?Axes')
plt.show()
2.Python Cmd
使用pythoncmd 插入相應(yīng)的語句。
3.舉例
(1) Ex1
#!/usr/local/bin/python
#?-*-?coding:?gbk?-*-
#******************************
#?TEST2.PY?????????????????????--?by?Dr.?ZhuoQing?2020-11-16
#
#?Note:
#******************************
from?headm?import?*
from?mpl_toolkits.mplot3d?import?axes3d
ax?=?plt.axes(projection='3d')
x?=?[1,2,3,4,5,6,7,8,9]
y?=?[2,3,4,6,7,8,9,5,1]
z?=?[5,6,2,4,8,6,5,6,1]
ax.plot3D(x,y,z)
ax.set_xlabel('X?Axes')
ax.set_ylabel('Y?Axes')
ax.set_zlabel('Z?Axes')
plt.show()
#------------------------------------------------------------
#????????END?OF?FILE?:?TEST2.PY
#******************************
(2) Ex2
from?mpl_toolkits.mplot3d?import?axes3d
ax?=?plt.axes(projection='3d')
angle?=?linspace(0,?2*pi*5,?400)
x?=?cos(angle)
y?=?sin(angle)
z?=?linspace(0,?5,?400)
ax.plot3D(x,y,z)
ax.set_xlabel('X?Axes')
ax.set_ylabel('Y?Axes')
ax.set_zlabel('Z?Axes')
plt.show()
(3) Ex3
import?matplotlib?as?mpl
from?mpl_toolkits.mplot3d?import?Axes3D
import?numpy?as?np
import?matplotlib.pyplot?as?plt
mpl.rcParams['legend.fontsize']?=?10
fig?=?plt.figure()
ax?=?fig.gca(projection='3d')
theta?=?np.linspace(-4?*?np.pi,?4?*?np.pi,?100)
z?=?np.linspace(-2,?2,?100)
r?=?z**2?+?1
x?=?r?*?np.sin(theta)
y?=?r?*?np.cos(theta)
ax.plot(x,?y,?z,?label='parametric?curve')
ax.legend()
plt.show()
02 繪制Scatter
利用和上面的相同的繪制命令,將原來的plot3D修改成為 scatter即可。
from?mpl_toolkits.mplot3d?import?axes3d
ax?=?plt.axes(projection='3d')
angle?=?linspace(0,?2*pi*5,?40)
x?=?cos(angle)
y?=?sin(angle)
z?=?linspace(0,?5,?40)
ax.scatter(x,y,z,?color='b')
ax.set_xlabel('X?Axes')
ax.set_ylabel('Y?Axes')
ax.set_zlabel('Z?Axes')
plt.show()
03 繪制3D Surface
(1) Ex1
#!/usr/local/bin/python
#?-*-?coding:?gbk?-*-
#******************************
#?TEST2.PY?????????????????????--?by?Dr.?ZhuoQing?2020-11-16
#
#?Note:
#******************************
from?headm?import?*
from?mpl_toolkits.mplot3d?import?axes3d
ax?=?plt.axes(projection='3d')
x?=?arange(-5,?5,?0.1)
y?=?arange(-5,?5,?0.1)
x,y?=?meshgrid(x,?y)
R?=?sqrt(x**2+y**2)
z?=?sin(R)
ax.plot_surface(x,?y,?z)
ax.set_xlabel('X?Axes')
ax.set_ylabel('Y?Axes')
ax.set_zlabel('Z?Axes')
plt.show()
#------------------------------------------------------------
#????????END?OF?FILE?:?TEST2.PY
#******************************
(2) 舉例
'''
***********
3D?surface?(color?map)
***********
Demonstrates?plotting?a?3D?surface?colored?with?the?coolwarm?color?map.
The?surface?is?made?opaque?by?using?antialiased=False.
Also?demonstrates?using?the?LinearLocator?and?custom?formatting?for?the
z?axis?tick?labels.
'''
from?mpl_toolkits.mplot3d?import?Axes3D
import?matplotlib.pyplot?as?plt
from?matplotlib?import?cm
from?matplotlib.ticker?import?LinearLocator,?FormatStrFormatter
import?numpy?as?np
fig?=?plt.figure()
ax?=?fig.gca(projection='3d')
#?Make?data.
X?=?np.arange(-5,?5,?0.25)
Y?=?np.arange(-5,?5,?0.25)
X,?Y?=?np.meshgrid(X,?Y)
R?=?np.sqrt(X**2?+?Y**2)
Z?=?np.sin(R)
#?Plot?the?surface.
surf?=?ax.plot_surface(X,?Y,?Z,?cmap=cm.coolwarm,
???????????????????????linewidth=0,?antialiased=False)
#?Customize?the?z?axis.
ax.set_zlim(-1.01,?1.01)
ax.zaxis.set_major_locator(LinearLocator(10))
ax.zaxis.set_major_formatter(FormatStrFormatter('%.02f'))
#?Add?a?color?bar?which?maps?values?to?colors.
fig.colorbar(surf,?shrink=0.5,?aspect=5)
plt.show()
免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。文章僅代表作者個(gè)人觀點(diǎn),不代表本平臺(tái)立場,如有問題,請聯(lián)系我們,謝謝!