У меня есть фрейм данных с количеством функций (скажем, 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')
- Я создал 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 точек и определении ближайших к каждой точке исоедините их, чтобы нарисовать пересекающуюся линию, но мне было интересно, есть ли какой-нибудь графический способ выяснить это.