Espacio de coordenadas tridimensional en Python

Dibujar puntos, líneas y superficies en un espacio tridimensional
1. Dibujar puntos
Use scatter () para dibujar puntos de coordenadas tridimensionales

from matplotlib import pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
dot1 = [[0, 0, 0], [1, 1, 1], [
    2, 2, 2], [2, 2, 3], [2, 2, 4]]  # 得到五个点
plt.figure()  # 得到画面
ax1 = plt.axes(projection='3d')
ax1.set_xlim(0, 5)  # X轴,横向向右方向
ax1.set_ylim(5, 0)  # Y轴,左向与X,Z轴互为垂直
ax1.set_zlim(0, 5)  # 竖向为Z轴
color1 = ['r', 'g', 'b', 'k', 'm']
marker1 = ['o', 'v', '1', 's', 'H']
i = 0
for x in dot1:
    ax1.scatter(x[0], x[1], x[2], c=color1[i],
                marker=marker1[i], linewidths=4)  # 用散点函数画点
    i += 1
plt.show()

Inserte la descripción de la imagen aquí

** 2.
Función de dibujo lineal plot3D (xs, ys, * args, zdir = 'z', ** kwargs), utilizada para dibujar líneas de coordenadas tridimensionales, los parámetros son los siguientes.
(1) xs, ys, zdir = 'z': establece los valores de las coordenadas (x, y, z) como un objeto de colección, que es la única diferencia entre esta función y plot ().
(2) kwargs: acepta parámetros de pares clave-valor y utiliza el mismo método que plot ()

from matplotlib import pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
plt.figure()
ax = plt.subplot(111, projection='3d')
ax.set_xlim(0, 20)  # X轴,横向向右方向
ax.set_ylim(20, 0)  # Y轴,左向与X,Z轴互为垂直
ax.set_zlim(0, 20)  # 竖向为Z轴
z = np.linspace(0, 4*np.pi, 500)
x = 10*np.sin(z)
y = 10*np.cos(z)
ax.plot3D(x, y, z, 'black')  # 绘制黑色空间曲线
# ----------------------------------------------------------
z1 = np.linspace(0, 4*np.pi, 500)
x1 = 5*np.sin(z1)
y1 = 5*np.cos(z1)
ax.plot3D(x1,y1,z1,'g--')     #绘制绿色空间虚曲线
#------------------------------------------------------------
ax.plot3D([0,18,0],[5,18,10],[0,5,0],'om-')   #绘制带o折线
plt.show()

Inserte la descripción de la imagen aquí

3.
Los datos necesarios para dibujar un gráfico 3D de superficie son básicamente los mismos que los del mapa de contorno: los datos X e Y determinan los puntos de coordenadas, y los datos del eje Z determinan la altura correspondiente a los puntos de coordenadas X e Y. A diferencia de los mapas de contorno que usan líneas de contorno para representar alturas, los gráficos 3D representan alturas de una forma más intuitiva.
Para dibujar gráficos 3D, debe llamar al método plot_surface () del objeto Axes3D para completar.

from matplotlib import pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm
import numpy as np
fig = plt.figure(figsize=(15, 5))
ax = fig.add_subplot(131, projection='3d')  # 第一个绘图区
x = np.arange(1, 50, 1)
y = np.arange(1, 50, 1)
X, Y = np.meshgrid(x, y)  # 将坐标向量(x,y)变为坐标矩阵(X,Y)


def Z(X, Y):  # 自定义求Z向量的函数
    return X*0.2+Y*0.3+20


s1 = ax.plot_surface(X, Y, Z(X, Y), rstride=10,
                     cstride=10, cmap=cm.jet, linewidth=1,
                    antialiased=True)   #绘制面
ax.set_xlim3d(0,50)   #指定x轴坐标值范围
ax.set_ylim3d(0,50)   #指定y轴坐标值范围
ax.set_zlim3d(0,50)    #指定z轴坐标值范围 
fig.colorbar(s1,shrink=1,aspect=5)   
#------------------------------------------
ax1 = fig.add_subplot(132,projection='3d')   #第二个绘图区
s2 = ax1.plot_surface(X,Y,Z(X,Y),rstride=1,
                     cstride=1, cmap=cm.jet, linewidth=1,
                    antialiased=False)   #绘制面
fig.colorbar(s2,shrink=0.5,aspect=5)
#--------------------------------------------
d = 0.05
x1 = np.arange(-4,4,d)
y1 = np.arange(-3,3,d)
X1,Y1 = np.meshgrid(x1,y1)
def Z1(X,Y):                  #自定义求z向量的函数
    z1 = np.exp(-X**2-Y**2)
    z2 = np.exp(-(X-1)**2-(Y-1)**2)
    return (z2-z1)*2              #返回Z坐标值
ax2 = fig.add_subplot(133,projection='3d')
s3 = ax2.plot_surface(X,Y,Z(X,Y),rstride=1,
                     cstride=1, cmap=cm.jet, linewidth=1,
                    antialiased=False)
fig.colorbar(s3,shrink=0.5,aspect=5)
plt.show()

Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/changshupx/article/details/108708714
Recomendado
Clasificación