нарисовать прозрачную плоскую поверхность, используя mplot3d в python - PullRequest
0 голосов
/ 11 июля 2019

Я хочу показать разделение между данными трехмерного графика.Как деление их между верхом и низом Z = 100 поверхности.

Это мой код:

# x, y, t are lists of points that shows (x,y) coordinate of an object at time t

cor_x = np.poly1d(np.polyfit(t, x, 5))
cor_y = np.poly1d(np.polyfit(t, y, 5))

ax = plt.axes(projection="3d")
ax.plot3D(cor_x(t), cor_y(t), t)
plt.show() 

Все, что я хочу, это прозрачная поверхность с z = 100.

1 Ответ

1 голос
/ 11 июля 2019

Если вы хотите построить поверхность, используйте ax.plot_surface(X, Y, Z). Где X, Y - это 2-мерная сетка, созданная с помощью np.meshgrid, а Z - данные в той же сетке. Вы можете сделать поверхность z = 100, взяв ваши данные и умножив на ноль и добавив 100.

Вы можете использовать alpha, чтобы изменить прозрачность. Обратите внимание: чем прозрачнее, тем труднее увидеть, что может быть не лучшим подходом для разделения ваших данных.

Вот пример.

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

def f(x, y):
    return x**2 + y**2

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')


x = y = np.arange(-10.0, 10.0, .1)
X, Y = np.meshgrid(x, y)

Z = f(X,Y)

ax.plot_surface(X, Y, Z,color='gray',alpha=.8)


#To plot the surface at 100, use your same grid but make all your numbers zero
Z2 = Z*0.+100
ax.plot_surface(X, Y, Z2,color='r',alpha=.3) #plot the surface

plt.show()

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...