Python: Agregando matrices 2D desde una rejilla de malla
Estoy graficando dos grafos superficiales en Python obtenidos de np.meshgrid
, los cuales quiero unir para crear solo un grafico. Por ejemplo:
fig = plt.figure(figsize=(8,4))
ax = fig.add_subplot(projection='3d')
Primera superficie:
x1 = np.linspace(0,1,100)
y1 = np.linspace(0,1,100)
X1,Y1 = np.meshgrid(x1,y1)
Z1 = 2*Y1
solid = ax.plot_surface(X1,Y1,Z1,cmap=cm.coolwarm,linewidth=0, antialiased=True)
Segunda superficie:
x2 = np.linspace(0,1,100)
y2 = np.linspace(1,2,100)
X2,Y2 = np.meshgrid(x2,y2)
Z2 = 2*Y2
solid = ax.plot_surface(X2,Y2,Z2,cmap=cm.coolwarm,linewidth=0, antialiased=True)
Mi primera idea fue unirlos con np.append
, como tal:
X = np.append(X1,X2)
Y = np.append(Y1,Y2)
Z = np.append(Z1,Z2)
solid = ax.plot_surface(X,Y,Z,cmap=cm.coolwarm,linewidth=0, antialiased=True)
Pero como era de esperar, se produjo un error ya que Z estaba aplanado y, además, no estoy seguro de si X e Y son correctos. En el ejemplo anterior, es trivial cómo podría crear solo una superficie ya que ambos tienen el mismo ángulo, pero quiero resolver el caso general donde podrían tener diferentes inclinaciones. ¿Cómo puedo superar este problema? ¡Gracias de antemano!
davy.ai
Para crear una gráfica de superficie combinada, necesitamos apilar las mallas individuales a lo largo del eje perpendicular a la superficie, que es la dirección
z
en nuestro caso. Sin embargo, como las dos superficies tienen diferentes rangos en la direccióny
, debemos ajustar los valores dez
de una de las superficies para que coincida con la otra superficie en el punto de interfaz.Aquí hay una versión modificada del código que hace esto:
La función
np.vstack
se utiliza para apilar las mallas verticalmente a lo largo del ejez
y el ajuste de la segunda superficie se realiza restando la diferencia en los valoresz
en el punto de interfaz. Esto asegura que las dos superficies se conecten suavemente en el punto de interfaz.Aquí está la gráfica resultante: