Нарисуйте пересекающуюся 2D-плоскость на 3D-поверхности, используя matplotlib - PullRequest
0 голосов
/ 04 ноября 2019

У меня есть фрейм данных с количеством функций (скажем, F1, F2, ...) и прогнозируемыми значениями (скажем, P1). Для простоты использования я создал 3d-визуализацию результатов моей модели ML, используя 3d-поверхность matplotlib, где конечный пользователь может видеть, как изменяется цель (P1) как функция (F1 и F2).

Теперь я хочу добавить еще одну двумерную поверхность и графически определить пересечения этих двух поверхностей. Это может позволить пользователю установить целевое значение (P1) и просмотреть все возможные значения F1 и F2 (при получении равного или ниже целевого значения).

Короче, я пытаюсьНарисуйте 2d-плоскость в 3d-пространстве, когда z==0.5 (скажем), и найдите линию пересечения с моей 3d-поверхностью (возможные значения x и y для данного z).

Код:

fig = plt.figure()
ax = fig.gca(projection='3d')
  1. Я создал Tri-Surface, как показано ниже:
 ax.plot_trisurf(df[F1], df[F2], df[P1], cmap=cm.coolwarm, linewidth=0, 
 antialiased=False)

У меня есть некоторый сюжет, как показано ниже: Trisurf

Затем я попробовал ax.plot_surface, чтобы добавить еще один двухмерный график. Это было невозможно с ax.plot_trisurf. И добавил туда еще 2d плоскость.

'' Создайте 2D-массивы из столбца 1d df ''

 x1 = np.linspace(df[F1].min(), df[F1].max(), len(df[F1].unique()))
 y1 = np.linspace(df[F2].min(), df[F2].max(), len(df[F2].unique()))
 x2, y2 = np.meshgrid(x1, y1)
 z2 = griddata((df[F1], df[F2]), df[P1], (x2, y2), method='cubic')

 surf = ax.plot_surface(x2, y2, z2, rstride=1, cstride=1, alpha=0.1)
 cset = ax.contourf(x2, y2, z2, zdir='z', offset=48, cmap=cm.coolwarm)

Затем я получаю график, как показано ниже: plot_surface + contourf

Я хочу знать пересечение этих двух графиков.

Один из способов заключается в использовании сеток 10k на 10k точек и определении ближайших к каждой точке исоедините их, чтобы нарисовать пересекающуюся линию, но мне было интересно, есть ли какой-нибудь графический способ выяснить это.

...