Как построить плоскость среза с помощью «matplotlib» в python - PullRequest
0 голосов
/ 04 марта 2020

Интересно, как создать две плоскости нарезки с поверхностью до двух двумерных фигур.

Например, я создал поверхность, как показано ниже:

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

def f(x1, x2):
    return 0.5 * x1 + 0.6 * x2 + 0.2 * x1 * x1 + 0.1 * x1 * x2 + 0.3 * x2 * x2 + 4

x = np.linspace(-3, 3, 100)
y = np.linspace(-3, 3, 100)
xx, yy = np.meshgrid(x,y)
z = f(xx, yy)

# set up the figure
fig = plt.figure()
ax = fig.gca(projection='3d')
ax.set_xlim(-3, 3)
ax.set_ylim(3, -3)
ax.set_xlabel("x")
ax.set_ylabel("y")
ax.set_zlabel("z")

# plot the figure
ax.plot_surface(xx, yy, z, cmap="spring", alpha = 0.7)

# add the x=y line to the ground plane
ax.plot([-3, 3], [-3, 3], color='grey', linewidth=1, linestyle='dashed')

# add the x=-y line to the ground plane
ax.plot([3, -3], [-3, 3], color='grey', linewidth=1, linestyle='dashed')

ax.plot(x, x, f(x, x), color='dodgerblue')
ax.plot(x, -x, f(x, -x), color='dodgerblue')

plt.show()

Поверхность, созданная выше код выглядит следующим образом

a surface

После этого я хочу добавить две плоскости среза, которые являются плоскостями x = y и x = -y. И нанесите линии разреза двух плоскостей и поверхности на две разные двумерные фигуры.

Например, одна двумерная фигура линии разреза поверхности и плоскости x = y будет что-то вроде фигуры в красном поле ниже, но без поверхности, только красная кривая.

the 2d plot

1 Ответ

0 голосов
/ 04 марта 2020

На самом деле, просто нужно построить их на двух двумерных фигурах

# slicing figure 1
fig2, ax2 = plt.subplots()
ax2.plot(x, f(x, y, b1, b2, b3, b4, b5, con))
ax2.set_title("x=y plane")
ax2.set_xlim(-3, 3)
ax2.set_ylim(1, 15)

# slicing figure 2
fig3, ax3 = plt.subplots()
ax3.plot(x, f(x, -y, b1, b2, b3, b4, b5, con))
ax3.set_title("x=-y plane")
ax3.set_xlim(-3, 3)
ax3.set_ylim(1, 15)
...